在第一個項目使用 GatewayWorker\Lib\Gateway
搭起了環(huán)境,可以正常運行,客戶端可以正常連接,sendToClient
方法也可以正常發(fā)送指令給指定的客戶端。
在第二個項目中,使用 GatewayClient\Gateway
連接第一個項目,是正常的,可以通過getClientIdByUid
獲取到第一個項目里邊的在線客戶端的$client_id
,但是調(diào)用sendToClient
發(fā)送消息給指定客戶端的時候,客戶端一直接收不到消息。
一開始我以為在第二個項目中使用 GatewayClient\Gateway
這個類不對,但是調(diào)用GatewayWorker\Lib\Gateway
這個類,同樣也無法發(fā)送消息給客戶端。
第二個項目中
use GatewayClient\Gateway;
//這里獲取是正常的,可以得到對應(yīng)code綁定的client_id
$client_ids = Gateway::getClientIdByUid($data['code']);
//打印client_ids[0],是有值的
//就是執(zhí)行sendToClient這里,消息發(fā)不出去,客戶端接收不到
Gateway::sendToClient(
$client_ids[0],
json_encode($resData)
);
我想知道第二個項目中通過$uid
獲取到$client_id
后,不可以直接使用sendToClient
發(fā)送給客戶端嗎?
"workerman/gateway-worker": "^4.0",
"workerman/gatewayclient": "^3.0",
"workerman/workerman": "^4.1"
找到問題所在了,uid和client_id是一對多的關(guān)系。
如果客戶端斷線重連更換了client_id,那么sendToClient通過client_id發(fā)消息給客戶端的時候,可能會找不到對應(yīng)的客戶端。之前是有的時候可以接收到,有時候接收不到。
我換成sendToUid通過uid發(fā)給客戶端的時候,是可以接收到消息的。
uid和client_id的關(guān)系,手冊有說明。
http://www.wtbis.cn/doc/gateway-worker/bind-uid.html