GatewayWorker源码分析
2021/07/12
posted in
服务端
2021/07/12
posted in
服务端
GatewayWorker官方介绍是为了开发长连接的应用。
register在worker进程和gateway进程中间
我们下载运行一下
主要由3个worker组成,对应文件里的3个
我们主要将逻辑写在Events.php事件逻辑里即可,其它交给布署的人员。
跟websocket三核心方法一样
onConnect // 客户连接
onMessage // 处理客户消息
onClose // 客户关闭
因为GatewayWorker依赖workerman的原因,源码文件并不多,主要我们要掌握思路
.
├── BusinessWorker.php 用户事件处理
├── Gateway.php gateway
├── Lib
│ ├── Context.php 上下文管理
│ ├── Db.php db类
│ ├── DbConnection.php db连接,作池使用
│ └── Gateway.php gateway方法,主要学习这个类
├── Protocols
│ └── GatewayProtocol.php 通讯协议
└── Register.php Register类
Protocols和Lib暂且可以不分析,除了Lib/Gateway.php文件
主要是管理gateway连接和worker连接, 然后广播一下地址broadcastAddresses
BusinessWorker主要是调用用户Events.php的逻辑, 并向GateWay保持通讯
主要是入口,例如每个浏览器先访问GatewayWorker, GatewayWorker再到找Register进程,连接到用户逻辑模块。
很多核心逻辑处理,主要看这个类
方法比较多
sendToAll 广播信息
sendToClient 发送给指定客户
isUidOnline 判断某个客户端是否在线
isOnline 是否在线
getClientInfoByGroup 获取某个组信息
getAllClientIdCount 获取所有在线client_id数
getUidListByGroup 获取某个群组在线uid
getAllUidList 获取全局在线uid
等等
方法比较多,需每个认真查看逻辑,分析作者设计思想
总的来说GatewayWorker的设计思想还是比较好的,可以横向扩展分布式的思路。如果不关心是怎么运作,倒是写好Events.php就够用,学习好Lib\Gateways的方法。