swoole 弹幕系统

一、服务器分布

 

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-nworker进程

    3.1、接收用户发出的消息,并存到redis

    3.2、在共享内存(data cache进程)标示该房间有新消息

4、data-cache-processprocess进程,用于做共享内存,存放roomIdfdId对应关系,房间是否有新消息标示等等

5、monitor-processprocess进程

    5.1、分析本机共享内存看哪个房间有新消息(对应3.2

    5.2、分析redis看哪个房间有新消息(对应2

    5.3、对有新消息的roomId进行publish

6、send-process-nprocess进程

    6.1、启动时swoole_redissubscribe

    6.2onMessage之后读取消息,并遍历发送给房间内的fd

 

三、data process进程数据交互

1、workersendMessageonPipeMessage

2、processwriteread(写最大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

 

 

posted @ 2017-02-27 20:00  andy_chan  阅读(560)  评论(0编辑  收藏  举报