一台服务器A,注册地址如下:
$register = new Register('text://0.0.0.0:1238');$gateway = new Gateway("websocket://0.0.0.0:9502");
// gateway名称,status方便查看
$gateway->name = 'YourAppGateway';
// gateway进程数
$gateway->count = 4;
// 本机ip,分布式部署时使用内网ip
$gateway->lanIp = '127.0.0.1';
// 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
// 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口
$gateway->startPort = 2900;
// 服务注册地址
$gateway->registerAddress = '127.0.0.1:1238';
单机应用已正常,现在想实现公网的另一台机子B群发客户端,安装了gatewayClient,我将A服务器的lanIP改成公网址,B机子上启动,提示不能连接 unable to connect to tcp://127.0.0.1:2900 ,客户端不是和gateway地址通信吗?为什么会连接具体的worker端口,我已将1238端口防火墙开放,难道要把2900-2904这些端口也要开放吗?请指教,不胜感激!
既然是分布式部署,那么:
1、A机器:$gateway->lanIp = 'x.x.x.x'; //x.x.x.x不能是127.0.0.1啦,只能是A机器内网或公网IP 2、B机器的GatewayClient必须配置:Gateway::$registerAddress = 'x.x.x.x:1238'; //x.x.x.x指的是A机器的内网或公网IP3、针对B机器必须放行如下端口:1238、2900、2901、2902、29034、客户端是和 gateway的9502端口通信,但是 GatewayClient 则是和gateway的内部端口通信的,不是一回事。