弹幕服务器,其客户端项目见danmu-client。
欲使用此项目,客户端需要使用对应的版本。已发布的服务端均已写明对应的客户端版本号,开发分支内的服务端版本仅对应开发分支的客户端。
- 跨平台;
- 房间功能;
- 后台管理;
- 弹幕记录与搜索(需要开启数据库);
- 黑名单功能;
- 关键词替换、拦截功能;
- 弹幕记录;
- 扩展;
- 新浪微博登录扩展(需要开启缓存);
- 自动封禁功能扩展(需要开启缓存);
- 删除单条弹幕功能;
- 易于部署,简单高效。
稳定版请于Release手动下载。
必须安装Nodejs。强烈推荐使用最新版本Nodejs。
无需任何附加操作,直接使用npm start
就可以启动。
你需要先用babel编译后才能使用。
首先,你需要安装babel-cli: npm install babel-cli -g
,接着进入本项目根目录下进行编译:
npm run install-babel
npm run compile
npm install
编译后,即可npm start
启动。
先按照Node 4.0的方法进行编译,编译后使用npm run start-0.12
启动。
如使用csv
,可无视此节。
默认使用MySQL
数据库。如需使用,需检查MariaDB或MySQL的安装状态。支持5.0+
。安装完成后,请创建相应的数据库。
如使用MongoDB
数据库,请检查MongoDB的安装状态。然后需要在安装完成后执行:npm install mongodb
。
如不使用新浪微博与自动封禁功能,可无视此节。
默认使用memcached
。如需使用,请检查Memcached(Linux)的安装状态。Windows
用户请自行查找适合的Memcached
版本。
如果要用阿里云开放缓存服务OCS,需要在安装完成后执行:npm install aliyun-sdk
。
- 配置MariaDB,创建数据库等,不需要创建数据表。
- 修改
config.js
,使其参数与环境相符。 - 切换到命令行或终端,
cd
到程序所在目录执行npm install
,安装程序依赖库。 - 现在,你可以直接
npm start
启动。
直接用Docker
安装的话,镜像内是含MariaDB
的。如果不需要,请根据Dockerfile
内的提示手动删除。
- 安装Docker。
config.js
调整配置。docker build -t="zsxsoft/danmu-server:" . && docker run -t -i -p 3000:3000 "zsxsoft/danmu-server"
在DaoCloud下安装,如使用服务集成的MySQL的话,请根据Dockerfile
内的提示手动删除MariaDB
相关内容。不需要修改数据库信息,程序会自行检测。
- 在每个房间内增加hostname配置,类型为数组,用于将房间与域名绑定
可以直接发布最简单的弹幕。
可以发布高级弹幕(需要密码)
可以进行后台管理
可以实时接收弹幕并直接删除或封禁(需要密码)
以下标有*
的配置项,运行时不可在后台修改。
"rooms": {
"房间1": {
* "hostname": ["test.zsxsoft.com", "localhost", "127.0.0.1"],
* "display": "房间显示名",
* "table": "对应MySQL的数据表、MongoDB的集合",
"connectpassword": "客户端连接密码",
"managepassword": "管理密码",
"advancedpassword": "高级弹幕密码",
"keyword": {
"block": /强制屏蔽关键词,正则格式。/
"replacement": /替换关键词,正则格式/,
"ignore": /忽略词,正则格式/
},
"blockusers": [
"默认封禁用户列表"
],
"maxlength": 弹幕堆积队列最大长度,
"textlength": 每条弹幕最大长度,
* "image": {
* "regex": /图片弹幕解析正则,正则格式,不要修改/ig,
* "lifetime": 每个图片给每条弹幕增加的存货时间
},
"permissions": { // 普通用户允许的弹幕权限
"send": 弹幕开关;关闭后无论普通用户还是高级权限都完全禁止弹幕。,
"style": 弹幕样式开关,
"color": 颜色开关,
"textStyle": CSS开关,
"height": 高度开关,
"lifeTime": 显示时间开关,
}
},
"房间ID2": {
// 同上
}
},
* "database": { // 数据库
* "type": "数据库类型(mysql / mongo / csv / none)",
* "server": " 数据库地址(mysql / mongo)",
* "username": "数据库用户名(mysql / mongo)",
* "password": "数据库密码(mysql / mongo)",
* "port": "数据库端口(mysql / mongo)",
* "db": "数据库(mysql / mongo)",
* "retry": 24小时允许断线重连最大次数,超过则自动退出程序。24小时以第一次断线时间计。(mysql),
* "timeout": 数据库重连延时及Ping(mysql),
* "savedir": "指定文件保存位置(csv)",
},
"websocket": {
"interval": 弹幕发送间隔
"singlesize": 每次弹幕发送数量
},
* "http": {
* "port": 服务器HTTP端口,
* "headers": {}, // HTTP头
* "sessionKey": "随便写点,防冲突的"
},
* "cache": {
* "type": "缓存类型(memcached / aliyun)",
* "host": "缓存服务器地址,可用socket",
* "auth": 打开身份验证,
* "authUser": 身份验证账号,
* "authPassword": 身份验证密码,
},
"ext": {
// 扩展
}
}
{ [Error: Connection lost: The server closed the connection.] fatal: true, code: 'PROTOCOL_CONNECTION_LOST' }
请把MySQL的wait_timeout
设置得大一些。
此处测试已过时
测试命令:ab -n 6000 -c 1000 -v 4 -p "post.txt" -T "application/x-www-form-urlencoded" http://127.0.0.1:3000/post
环境:Linux 3.10.0-123.9.3.el7.x86_64 / Intel(R) Xeon(R) CPU E5-2630 @ 2.30GHz / 512MB / node v0.12.1 / mariadb-server.x86_64 1:5.5.41-2.el7_0 / 阿里云杭州机房D,一个客户端连接,OCS
默认配置,开启新浪微博登录,开启自动封禁。QPS 225.38 / 241.58
默认配置,关闭新浪微博登录,关闭自动封禁。QPS 461.97 / 431.51
默认配置,删除日志输出,关闭新浪微博登录,关闭自动封禁。QPS 720.89 / 812.66
<p>环境:iojs v1.8.1</p>
<p>默认配置,开启新浪微博登录,开启自动封禁。QPS 444.42 / 536.25</p>
<p>默认配置,关闭新浪微博登录,关闭自动封禁。QPS 633.99 / 865.28</p>
The MIT License (MIT)
zsx - http://www.zsxsoft.com / 博客 - http://blog.zsxsoft.com