一、服务器分布
1、LVS负载均衡
2、多台danmu server
3、Redis(集群)用于存储数据和夸服务器订阅通知
4、Cli server用于读取缓存数据并存到mysql,以及清空缓存
二、弹幕服务端
1、danmu-server使用swoole_websocket_server,中间是子进程,最下面是redis服务器
2、web-server是网页http请求,可以产生的动态推送,并将消息存到redis
3、receive-worker-n是worker进程
3.1、接收用户发出的消息,并存到redis
3.2、在共享内存(data cache进程)标示该房间有新消息
4、data-cache-process是process进程,用于做共享内存,存放roomId、fdId对应关系,房间是否有新消息标示等等
5、monitor-process是process进程
5.1、分析本机共享内存看哪个房间有新消息(对应3.2)
5.2、分析redis看哪个房间有新消息(对应2)
5.3、对有新消息的roomId进行publish
6、send-process-n是process进程
6.1、启动时swoole_redis去subscribe
6.2、onMessage之后读取消息,并遍历发送给房间内的fd
三、data process进程数据交互
1、worker:sendMessage与onPipeMessage
2、process:write与read(写最大8k,读最大64k,自己用pack打包)
四、特殊说明
1、swoole table需要设置行数,且只支持一维,所以自己用process做共享内存
2、onHandshake的时候,还处理了分房间、记录用户信息、刷新新用户列表、进入房间消息等
3、monitor-process除了上面说到的监控新消息,还包含监控直播间回收、监控禁言、监控在线人数等
4、部分功能点通过cli脚本处理,包括redis资源入库及回收等
五、代码段(暂不提供)
1、server.php
2、coroutine.php
3、data_cache.php
4、packet.php
5、pool.php