CONNMIX 开发 WebSocket 视频弹幕
使用WebSocket制作一个单机版弹幕系统非常简单,但是当单机性能达到瓶颈,需要扩展为集群部署时就会面临很多分布式问题,使用CONNMIX则无需担心这些问题,很少的代码即可完成一个高性能分布式WebSocket集群。
要求
- connmix >= v1.0.4
设计思路
- 客户端在ws连接成功后,订阅一个视频ID的通道
video:<videoid>
- 在发送弹幕的接口中,调用connmix任意节点的
/v1/mesh/publish
接口往对应video_id
发送实时弹幕,所有订阅该通道的ws客户端都将会收到消息。 - 以上都是增量推送设计,全量通常都是在页面加载时通过一个全量api接口获取。
交互协议设计
- 当用户发送 100001@video 我们在 lua 代码中就执行订阅 video:100001 通道。
- 前端切换视频时,可先发送取消弹幕消息,然后发送新的订阅弹幕消息。
功能 | json格式 |
---|---|
订阅弹幕 | {“op”:“subscribe”,“channel”:“100001@video”} |
取消弹幕 | {“op”:“unsubscribe”,“channel”:“100001@video”} |
弹幕事件 | {“event”:“@video”,“data”:{“uid”:1001,“video_id”:100001,“msg”:“Hello,World!”}} |
成功 | {“result”:true} |
错误 | {“code”:1,“msg”:“Error”} |
安装引擎
修改配置
在 connmix.yaml
配置文件的 options
选项,修改websocket的url路径
options:
- name: path
value: /barrage-videos
CONNMIX 编码
修改 entry.websocket.lua
的 on_message
方法如下:
- 当接受到subscribe、unsubscribe消息时,执行订阅/取消订阅对应的通道
function on_message(msg)
--print(msg)
if msg