Register必须单点唯一,所有Gateway和BusinessWorker统一指向同一地址(如10.0.1.10:1236),禁止多实例;各服务器Gateway需配置真实lanIp、错开startPort;Redis、uid、group名须加站点前缀隔离。

多服务器部署 GatewayWorker 时,Register(注册中心)必须严格保持单点、唯一、可被所有 Gateway 和 BusinessWorker 进程稳定访问,否则会导致网关连接状态不同步、消息丢失、sendToGroup 失效等严重问题。
Register 必须单实例且高可用
Register 是纯内存服务,不支持多进程或集群模式。即使在多服务器环境下,也只允许一个 Register 进程运行(例如固定部署在 10.0.1.10:1236)。其他所有服务器上的 Gateway 和 BusinessWorker 都必须指向这个唯一地址。
- 禁止在每台服务器上各自启动 start_register.php
- 推荐将 Register 部署在独立、稳定的内网服务器上,避免与 Gateway 或 BusinessWorker 混部
- 可通过 Nginx TCP 反向代理 + Keepalived 实现 VIP 故障转移(仅限网络层冗余),但后端仍只能有一个 Register 实例运行
Gateway 进程配置要点
每台服务器上的 Gateway 进程需明确告知其所在物理位置和通信能力:
- lanIp:必须填写该服务器真实的内网 IP(如 10.0.1.21),不能写 127.0.0.1 或 0.0.0.0
- registerAddress:统一设为注册中心地址,例如 '10.0.1.10:1236'
- startPort:各服务器之间建议错开起始端口段(如 A 服务器用 2000–2003,B 服务器用 2004–2007),避免本地端口冲突
- 协议与监听地址:对外服务端口(如 websocket://0.0.0.0:7272)需确保防火墙/安全组放行;内部通信走 lanIp + startPort,仅限内网可达
BusinessWorker 连接注册中心
所有 BusinessWorker 进程(无论部署在哪台服务器)都必须使用相同 registerAddress,并主动连接 Register 获取 Gateway 地址列表:
- 确认 BusinessWorker 启动时未设置 --daemon 或环境干扰导致连接失败
- 检查日志中是否出现 “Register not found” 或 “Connection refused” 类错误
- 可在 BusinessWorker 的 onWorkerStart 中加日志,打印 Gateway 地址数组长度,验证是否成功拉取到全部 Gateway 节点
跨服务器 Redis 与业务隔离
若多个站点共用同一 Gateway 集群,还需注意:
- Redis 连接必须指向同一个共享实例(非本地),且 key 加前缀(如 tp1:online、tp2:group_chat)
- uid、group 名称需带站点标识(如 tp1_user_1001、tp2_admin_room)
- 所有站点的 GatewayClient 必须加载同一份 autoloader(建议 vendor 统一挂载,而非复制)


















