GatewayWorker源码分析

2021/07/12 posted in  服务端
Tags: 

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文件

Register

主要是管理gateway连接和worker连接, 然后广播一下地址broadcastAddresses

BusinessWorker

BusinessWorker主要是调用用户Events.php的逻辑, 并向GateWay保持通讯

GatewayWorker

主要是入口,例如每个浏览器先访问GatewayWorker, GatewayWorker再到找Register进程,连接到用户逻辑模块。

Lib\Gateway

很多核心逻辑处理,主要看这个类

方法比较多
sendToAll 广播信息
sendToClient 发送给指定客户
isUidOnline 判断某个客户端是否在线
isOnline 是否在线
getClientInfoByGroup 获取某个组信息
getAllClientIdCount 获取所有在线client_id数
getUidListByGroup 获取某个群组在线uid
getAllUidList 获取全局在线uid
等等
方法比较多,需每个认真查看逻辑,分析作者设计思想

总结

总的来说GatewayWorker的设计思想还是比较好的,可以横向扩展分布式的思路。如果不关心是怎么运作,倒是写好Events.php就够用,学习好Lib\Gateways的方法。

附录

GatewayWorker手册