A客戶端使用sendToUid方法發(fā)送消息給B客戶端(2個客戶端一個是chrome,一個是Firefox),但是B客戶端并沒有收到A發(fā)消息的websocket請求,在A客戶端發(fā)消息之前,使用isUidOnline方法檢測發(fā)送的目標(biāo)Uid是在線的
圖1 發(fā)送消息,對方在線
我使用的是環(huán)境:
(1)docker-php7.3、docker-nginx,GatewayWorker和阿里云香港云服務(wù)器Ubuntu
(2)客戶端使用的是wss協(xié)議,服務(wù)端用nginx代理wss請求
(3)使用sendToUid方法發(fā)消息的時候,后臺GatewayWorker終端用的是debug模式運行,但是沒有報錯,當(dāng)頻繁使用sendToUid方法發(fā)消息的時候,終端偶爾會報錯:SendBufferToWorker fail. The connections between Gateway and BusinessWorker are not ready. See http://doc2.workerman.net/send-buffer-to-worker-fail.html
(4)nginx做了訪問頻率限制,客戶端發(fā)起wss連接響應(yīng)偶爾會報502錯誤
(5)GatewayWorker的所有源碼、php、nginx都在同一臺云服務(wù)器上運行
圖2 客戶端和云服務(wù)器成功連接并得到了服務(wù)器回復(fù)、并綁定clientID 到 Uid 成功
圖3 客戶端wss連接云服務(wù)器偶爾報502錯誤
圖4 不管是沒收到消息還是wss連接云服務(wù)器報502錯誤,GatewayWorker命令行都沒有報錯(debug模式)
圖5 start_gateway.php和start_register.php填寫的服務(wù)注冊地址都完全一致
圖6 由于我的云服務(wù)器用的是協(xié)議是TLS1.2,因此我只改動了GatewayWorker的核心類庫源碼的這個位置
圖7 onWorkerStart里面未進行過任何改動,應(yīng)該沒有死循環(huán)之類的代碼
圖8 我網(wǎng)站域名的nginx的虛擬主機配置
圖9 nginx.conf的配置
圖10 云服務(wù)器防火墻
圖11 云服務(wù)器安全組
圖12 發(fā)送消息的關(guān)鍵GatewayWorker代碼
問題已解決,我關(guān)掉php的調(diào)試模式之后就可以通訊了。我猜是由于偶爾報的502錯誤中斷了wss數(shù)據(jù)的返回,不知道對不對,請大佬們賜教。