danmu-server
弹幕服务器。
目前的新浪微博模块因模块被从npm下架而无法使用,在修复前请关闭此功能。
功能特色
- 跨平台;
- 房间功能,可用一个端口为多个不同的弹幕客户端提供服务;
- 后台管理;
- 弹幕记录与搜索(需要开启数据库);
- 黑名单功能;
- 关键词替换、拦截功能;
- 弹幕记录;
- 扩展;
- 新浪微博登录扩展(需要开启缓存);
- 自动封禁功能扩展(需要开启缓存);
- 删除单条弹幕功能;
- 易于部署,简单高效。
后台截图
一些警告
稳定版请于Release手动下载。
Node 4.0以下版本(如0.10、0.12),请使用Release下的1.0.4版本。
部署方式
检查环境
Nodejs
必须安装Nodejs。支持node 4.0
以上版本。
强烈推荐使用最新版本Nodejs(截至写文档时,最新版本为5.1.1
)。
数据库
如使用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安装
直接用Docker
安装的话,镜像内是含MariaDB
的。如果不需要,请根据Dockerfile
内的提示手动删除。
- 安装Docker。
config.js
调整配置。docker build -t="zsxsoft/danmu-server:" . && docker run -t -i -p 3000:3000 "zsxsoft/danmu-server"
DaoCloud安装
在DaoCloud下安装,如使用服务集成的MySQL的话,请根据Dockerfile
内的提示手动删除MariaDB
相关内容。不需要修改数据库信息,程序会自行检测。
网页接口
GET /
可以直接发布最简单的弹幕。
GET /advanced
可以发布高级弹幕(需要密码)
GET /manage
可以进行后台管理
GET /realtime
可以实时接收弹幕并直接删除或封禁(需要密码)
配置说明
以下标有*
的配置项,运行时不可在后台修改。
"rooms": {
"房间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