工作原理
1、Register、Gateway、BusinessWorker 进程启动
2、Gateway、BusinessWorker 进程启动后向 Register 服务进程发起长连接注册自己
3、Register 服务收到 Gateway 的注册后,把所有 Gateway 的通讯地址保存在内存中
4、Register 服务收到 BusinessWorker 的注册后,把内存中所有的 Gateway 的通讯地址发给 BusinessWorker
5、BusinessWorker 进程得到所有的 Gateway 内部通讯地址后尝试连接 Gateway
6、如果运行过程中有新的 Gateway 服务注册到 Register(一般是分布式部署加机器),则将新的 Gateway 内部通讯地址列表将广播给所有 BusinessWorker,BusinessWorker 收到后建立连接
7、如果有 Gateway 下线,则 Register 服务会收到通知,会将对应的内部通讯地址删除,然后广播新的内部通讯地址列表给所有 BusinessWorker,BusinessWorker 不再连接下线的 Gateway
8、至此 Gateway 与 BusinessWorker 通过 Register 已经建立起长连接
9、客户端的事件及数据全部由 Gateway 转发给 BusinessWorker 处理,BusinessWorker 默认调用 Events.php 中的 onConnect onMessage onClose 处理业务逻辑。
10、BusinessWorker 的业务逻辑入口全部在 Events.php 中,包括 onWorkerStart 进程启动事件 (进程事件)、onConnect 连接事件 (客户端事件)、onMessage 消息事件(客户端事件)、onClose 连接关闭事件(客户端事件)、onWorkerStop 进程退出事件(进程事件)
适用范围
Gateway/Worker 的进程模型
特点:
从图上我们可以看出 Gateway 负责接收客户端的连接以及连接上的数据,然后 Worker 接收 Gateway 发来的数据做处理,然后再经由 Gateway 把结果转发给其它客户端。每个客户端都有很多的路由到达另外一个客户端,例如 client⑦与 client①可以经由蓝色路径完成数据通讯
优点:
1、可以方便的实现客户端之间的通讯
2、Gateway 与 Worker 之间是基于 socket 长连接通讯,也就是说 Gateway、Worker 可以部署在不同的服务器上,非常容易实现分布式部署,扩容服务器
3、Gateway 进程只负责网络 IO,业务实现都在 Worker 进程上,可以 reload Worker 进程,实现在不影响用户的情况下完成代码热更新。
适用范围:
适用于客户端与客户端需要实时通讯的项目。