必须部署至少两个register实例实现容灾,gateway节点需配置registeraddress为数组形式指向所有register地址,并设置lanip及开放startport至startport+count-1端口供内网通信。

要在生产环境稳定运行高并发WebSocket服务,必须将Workerman 4.0.20版本的GatewayWorker部署为跨服务器集群,避免单点故障并支撑横向扩容。
准备Register服务集群
Register是GatewayWorker集群的注册中心,必须先部署至少两个独立实例才能形成基础容灾能力。
在第一台服务器(192.168.5.10)上,编辑start_register.php,将监听地址改为内网IP:$register = new Register('text://192.168.5.10:1236');
在第二台服务器(192.168.5.11)上,同样修改start_register.php:$register = new Register('text://192.168.5.11:1236');
【Register端口1236必须仅对内网开放,严禁绑定0.0.0.0或暴露到公网】。若使用云服务器,需同步配置安全组放行该端口仅限内网IP互访。
配置Gateway节点注册地址
所有Gateway节点必须指向同一组Register服务地址,格式为数组。打开每台服务器上的start_gateway.php,定位到$gateway->registerAddress赋值行。
将其统一修改为:$gateway->registerAddress = ['192.168.5.10:1236', '192.168.5.11:1236'];
这一步不可省略——即使只启动一个Register,也必须写成数组形式,否则Workerman 4.0.20会因类型校验失败而拒绝启动。
设置Gateway本机内网IP与端口范围
Gateway进程需向Register上报自身真实内网地址,否则其他节点无法建立内部通信链路。
第一步:确认当前服务器的内网IP(如192.168.5.10),执行ip a | grep "inet " | grep -v "127.0.0.1"验证。
第二步:在start_gateway.php中设置$gateway->lanIp为该IP:$gateway->lanIp = '192.168.5.10';
第三步:检查$gateway->startPort和$gateway->count。例如设为startPort=2900; count=4,则2900~2903共4个端口必须全部开放给内网其他服务器访问——这些是Gateway间心跳与数据转发所用的私有通道。
启动与验证流程
① 先在两台Register服务器上分别执行:php start_register.php start -d
② 等待10秒后,在Gateway服务器上依次执行:php start_gateway.php start -d → php start_businessworker.php start -d
③ 登录任意一台Gateway服务器,运行:php start_gateway.php status → 查看输出中register状态是否为connected。
④ 在另一台Gateway服务器上执行相同命令,确认其也显示connected且指向相同的Register地址列表。











