GatewayWorker部署在阿里云,想在其它主机用GatewayClient发送消息

zhyt0520

GatewayWorker部署在阿里云,想在其它主机用GatewayClient发送消息
 
一、如果Gateway启动文件中lanIp设置为127.0.0.1或0.0.0.0,客户端可以正常连接websocket,但GatewayClient会按照127.0.0.1或0.0.0.0的ip进行连接,肯定失败。
 
二、如果Gateway启动文件中lanIp设置为阿里云主机的外网ip,启动GatewayWorker服务的时候,会一直报错:
stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxx (Cannot assign requested address)查看文档,应该是阿里云服务器的问题:

如果您是云服务器(阿里云/腾讯云等)用户,注意您的公网ip实际可能是个代理ip(例如阿里云的专有网络),公网ip并不属于当前的服务器,所以无法通过公网ip监听。虽然不能用公网ip监听,但是仍然可以通过0.0.0.0来绑定。

 
现在问题卡到这了,请大佬指点,有什么解决的办法?

3649 1 0
1个回答

blogdaren
  1. 根据你的描述来看,首先你设置的这个外网IP并不属于你的gatewayworker所在的服务器,所以无法监听所谓的公网IP。
  2. 分布式部署 lanIp = 内网ip 
  3. 防火墙放行 lanIp 以及 startPort 对应的那几个端口 以及 register服务所在的端口ip 
  4. 最后别忘记设置  Gateway::$registerAddress = 'ip:port'; // register服务所在的端口ip
  • zhyt0520 2019-01-30
    1. 分布式部署 lanIp = 内网ip
      这样设置的话,又跟设置为127.0.0.1或0.0.0.0一样的了
      PHP Warning: stream_socket_client(): unable to connect to tcp://【lanIp:port】 (�����������У�������ĵ�ַ��Ч��
      ) in D:\wamp64\www\TheDataDev\app\Lib\GatewayClient\Gateway.php on line 744
  • zhyt0520 2019-01-30

    我运行GatewayClient的地方跟GatewayWorker服务器不在一个局域网内

  • blogdaren 2019-01-30

    是设置内网ip,不是设置127.0.0.1

  • zhyt0520 2019-01-30

    @614:感谢您的耐心回复,我明天准备按这个文档里http://doc2.workerman.net/push-in-other-project.html的【方法三】试一下,感觉应该能行

  • blogdaren 2019-01-30

    @5391: 不用谢。我认为方法三一样是行不通的,和你现在使用gatewayclient一样,条件不满足,换句话就是:

    1. 要么lanIp设置为公网IP,这里的公网IP必须是gatewayworker所在的机器的真实公网IP,相应的配置对号入座。
    2. 要么lanIp设置为内网IP,但是gatewayclient所在的机器和gatewayworker所在的机器必须位于同一个内网。
    3. 如果gatewayclient所在的机器必须和 gatewayworker所在的机器位不在同一个内网,那么就得自己想办法比如借助路由器转发数据包什么的。
  • lpz 2019-04-16

    你好 你的这个问题解决了吗? 我也是阿里云 同样的问题

年代过于久远,无法发表回答
🔝