客户端之间无法通讯

workerman浅香
  1. A客户端使用sendToUid方法发送消息给B客户端(2个客户端一个是chrome,一个是Firefox),但是B客户端并没有收到A发消息的websocket请求,在A客户端发消息之前,使用isUidOnline方法检测发送的目标Uid是在线的
    截图
    图1 发送消息,对方在线

  2. 我使用的是环境:

(1)docker-php7.3、docker-nginx,GatewayWorker和阿里云香港云服务器Ubuntu
(2)客户端使用的是wss协议,服务端用nginx代理wss请求
(3)使用sendToUid方法发消息的时候,后台GatewayWorker终端用的是debug模式运行,但是没有报错,当频繁使用sendToUid方法发消息的时候,终端偶尔会报错:SendBufferToWorker fail. The connections between Gateway and BusinessWorker are not ready. See http://doc2.workerman.net/send-buffer-to-worker-fail.html
(4)nginx做了访问频率限制,客户端发起wss连接响应偶尔会报502错误
(5)GatewayWorker的所有源码、php、nginx都在同一台云服务器上运行
截图
图2 客户端和云服务器成功连接并得到了服务器回复、并绑定clientID 到 Uid 成功
截图
图3 客户端wss连接云服务器偶尔报502错误
截图
图4 不管是没收到消息还是wss连接云服务器报502错误,GatewayWorker命令行都没有报错(debug模式)
截图
截图
图5 start_gateway.php和start_register.php填写的服务注册地址都完全一致
截图
图6 由于我的云服务器用的是协议是TLS1.2,因此我只改动了GatewayWorker的核心类库源码的这个位置
截图
图7 onWorkerStart里面未进行过任何改动,应该没有死循环之类的代码
截图
截图
图8 我网站域名的nginx的虚拟主机配置
截图
图9 nginx.conf的配置
截图
图10 云服务器防火墙
截图
截图
图11 云服务器安全组
截图
图12 发送消息的关键GatewayWorker代码

3141 1 0
1个回答

workerman浅香

问题已解决,我关掉php的调试模式之后就可以通讯了。我猜是由于偶尔报的502错误中断了wss数据的返回,不知道对不对,请大佬们赐教。

  • 暂无评论
年代过于久远,无法发表回答
×
🔝