国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

遇到瓶頸了。弱弱的問(wèn)下bindUid綁定后當(dāng)前頁(yè)面收不到消息嗎

差點(diǎn)就信了

Gateway::bindUid($client_id,$id);Gateway::sendToUid($id, json_encode($data));

sendToUid的時(shí)候要開(kāi)2個(gè)頁(yè)面才能收到消息,下面就以a頁(yè) b頁(yè)來(lái)說(shuō)吧
a頁(yè)怎么刷就是沒(méi)收到 推過(guò)來(lái)的消息,得再開(kāi)一個(gè)頁(yè),b頁(yè)

然后在a頁(yè)上 刷, 可以在b頁(yè)看到消息, a頁(yè)就是沒(méi)有消息

?

3136 5 0
5個(gè)回答

phpcreeper

這么說(shuō)吧:?
1、首先題意不大明確,兩個(gè)頁(yè)面綁定的$id是同一個(gè)嗎? 如果不是那問(wèn)題就很明顯了,若用sendToUid()的第一個(gè)參數(shù)必須是數(shù)組類型的目標(biāo)id集合,當(dāng)然可以直接使用sendToAll();
2、如果綁定的是同一個(gè)$id,這就不好說(shuō)了,因?yàn)閮蓚€(gè)頁(yè)面的通信細(xì)節(jié)不知道你是做了什么處理,不管怎么樣,Gateway::bindUid($client_id,$id);
Gateway::sendToUid($id, json_encode($data));服務(wù)端這樣的操作是沒(méi)有什么問(wèn)題的,即向同一個(gè)id下綁定的所有client_id 發(fā)送消息,
也就是題示的a、b兩個(gè)頁(yè)面對(duì)應(yīng)的客戶端,所以問(wèn)題最有可能還是出在客戶端細(xì)節(jié)處理環(huán)節(jié)上,
比如:服務(wù)端推送消息時(shí),對(duì)應(yīng)的客戶端連接已經(jīng)被關(guān)閉了等等。
可以在服務(wù)端調(diào)用:Gateway::getClientIdByUid(mixed $uid);檢測(cè)下當(dāng)前id 綁定的所有 client_id 列表。

  • 暫無(wú)評(píng)論

謝謝大佬回復(fù)
$id是從http的session里面存到j(luò)s的,再由js發(fā)給worker綁定? 可以確定id是同一個(gè)
?
通信細(xì)節(jié)我也沒(méi)改過(guò),連過(guò)濾xss?都沒(méi)過(guò)濾,?直接就?
?
Gateway::sendToUid($id, json_encode($data));
?
發(fā)消息了,
?
試過(guò)您提供的??getClientIdByUid? 獲得到的?client_id??
?
?全部是同 一個(gè)client_id?
?
?
a頁(yè)面? 刷新3次

?
b頁(yè)面?刷新3次

?
始終還是那樣,?
?
?a頁(yè)面刷新的時(shí)候?接收不到?服務(wù)端發(fā)來(lái)的消息
?
卻在?b頁(yè)面收到了?服務(wù)端的消息
?
也用 Gateway::isUidOnline($id);測(cè)試過(guò) 打印出的是1

  • 暫無(wú)評(píng)論

服務(wù)端

   public static function onConnect($client_id)
   {
       Gateway::sendToClient($client_id,json_encode());
   }   
   public static function onMessage($client_id, $message)
   {

       $message_data=json_decode($message,1);
       if (!$message_data) {
           return false;
       }

        switch ($message_data)
        {
        case 'getWebOrder':
            $id= $message_data;
            $data=;
            Gateway::sendToUid($id, json_encode($data));
        break;
        case 'bind':
            Gateway::bindUid($client_id,$message_data);
        break;
        default:
            $data=;
        }
   }

客戶端

wsSend = {
    id: 1000000,// 來(lái)自http session 
    action: 'getWebOrder',
    data: $titleLong,
    };
    ws.onopen = function () {
        ws.send(JSON.stringify(wsSend));
    }; 

    if (js.type=='getWebOrder'){
            console.log(js);
    } 
     if (js.type=='init'){
           var ints={action:'bind','id':1000000}
           ws.send(JSON.stringify(ints)); 
     }
  • 暫無(wú)評(píng)論
xiuwang

你的邏輯明顯有問(wèn)題吧,ws.onopen的時(shí)候就發(fā)送getWebOrder類型的消息,這時(shí)候還沒(méi)bind呢,所以收不到。
你應(yīng)該在ws.onopen的時(shí)候先發(fā)送bind信息,之后再發(fā)送getWebOrder類型的消息。順序都反了,怎么可能收到。
?
你要的順序是
Gateway::bindUid($client_id,$id);
Gateway::sendToUid($id, json_encode($data));
?
但實(shí)際上你實(shí)現(xiàn)的順序是
Gateway::sendToUid($id, json_encode($data));
Gateway::bindUid($client_id,$id);?
?
反了反了

  • 暫無(wú)評(píng)論

也許可能是吧,
?
可...我不是在回話接入的時(shí)候?要求?綁定了嗎
?
onConnect?里面?下發(fā)?init?讓客戶端綁定,呀
?
好亂啊
?
應(yīng)該是大佬說(shuō)的?邏輯?反了
?
回頭再研究,

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??