单独一个 docker 部署了 register
之后其余 三台机器 部署了 业务代码
每台机器部署的 BusinessWorker 和 Gateway
这个时候 gateway 的 lanIp 为主机 网卡 IP的 时候 端口通信错误。
然后 lanIp 改成 127.0.0.1 就没问题,不知道怎么回事
docker 端口 映射 从 3900 到 3910
gateway 的 startPort 为 3900
每个机器部署 一个 gateway
运行后报错 3900 端口通信失败
我想问的是 , 虽然是分布式部署,但是 每台机器都部署 了 gateway,
是不是 gateway lanIp 写成 127.0.0.1 也没问题,
我使用 Gateway::getAllClientCount() 这样的方法 取所有在线 数量是不是 也是准确的
事实证明不可以, 部署多台 gateway getAllClientCount 取的是一台 gateway 的在线人数。
通过翻阅源代码 我们找到这样一段备注
所以我的配置档代码改成了这样的
$gateway->lanIp = getenv("LOCATION_IP");
$gateway->innerTcpWorkerListen = "0.0.0.0";
最终解决了 docker 容器内和work 通信的问题,
但是 就很疑惑 为何 分布式部署 lanIp 要写本地IP,
docker 容器环境 写成 127.0.0.1 然后端口映射也是可以运行的。
使用 innerTcpWorkerListen 参数 为 0.0.0.0 可以正确使用,并 使用各种网关函数 都正常!
Gateway::getAllClientCount() 可以取到所有网关 用户数量
目测 docker 网卡是 container 模式
lanIp 为内网IP 主要是为了解决 监听问题, 单机部署 设置为 127.0.0.1 没问题,非容器 用内网IP 也没问题
在容器下就不行了,在容器呢 监听 192.168.2.1: 3900
在容器外 开放 3900 端口,通信是不行的,因为容器内监听的是内网, 所以必须改成 0.0.0.0 才行。
但是 因为对底层了解的不够透彻,网关和worker 通信 会用到 IP地址,所以不敢贸然改动