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

基于websocket的協(xié)議,服務(wù)端未完全啟動時, client連接失敗后調(diào)用reconnect無效!

zhouciming

服務(wù)端未完全啟動時, client連接失敗后調(diào)用reconnect后,雖然connect成功的,但是發(fā)送數(shù)據(jù)服務(wù)端并不能接收到,這是為什么?
?
在onClose中我應(yīng)該怎么寫才能保證接下來發(fā)送數(shù)據(jù)能成功呢?

4370 1 0
1個回答

phpcreeper

給你個樣板代碼,照貓畫虎吧:

<script type="text/javascript">
    var ws, timer_id1, time_id2;

    //連接服務(wù)端
    function connect() {
       //創(chuàng)建websocket
       ws = new WebSocket("ws://"+document.domain+":8888");

       //當(dāng)socket連接打開時
       ws.onopen = onopen;

       //當(dāng)有消息時根據(jù)消息類型顯示不同信息
       ws.onmessage = onmessage; 

       ws.onclose = function(e) {
          console.log("連接關(guān)閉,定時重連");
          timer_id1 = setInterval(function(){
            connect();
          }, 5000);
          timer_id2 && clearInterval(timer_id2);
       };

       ws.onerror = function() {
          console.log("出現(xiàn)錯誤");
       };

       //客戶端主動發(fā)送心跳
       var timer_id2 = setInterval(function(){
           console.log("客戶端定時發(fā)送心跳包");
           ws.send('{"type":"ping"}');
       }, 20000);
    }

    //連接建立時發(fā)送數(shù)據(jù)
    function onopen() {
        timer_id1 && clearInterval(timer_id1);
        ws.send('some data...');
    }

    //服務(wù)端發(fā)來消息時
    function onmessage(e){
    }
</script>
  • zhouciming 2018-10-17

    利用timer重連,確實(shí)是一種方案,我目前用的是這種。情況是這樣的,原來我的server是繼承自Worker的自定義類,客戶端通過異步方式連接上來,在onconnect里連接成功后,不會被斷開。但是現(xiàn)在用的server是gatewayworker中的Gateway類,客戶端在第一次onconnect后,會被gateway close(因?yàn)間ateway可能未完全啟動好),然后客戶端再次發(fā)起重連,這時連接上后就不會被close了!
    所以想知道gateway的設(shè)計(jì)是否本來就是這樣的!?

  • phpcreeper 2018-10-17

    對于發(fā)起異步連接時,確實(shí)會存在gateway服務(wù)尚未來得及啟動而導(dǎo)致連接不上,所以需要客戶端重連,但是默認(rèn)情況下客戶端連接是不會被 gateway close掉的,除非gateway設(shè)置 $gateway->pingInterval > 0 并且 $gateway->pingNotResponseLimit > 0,這個代表客戶端若連續(xù)$pingNotResponseLimit次$pingInterval時間內(nèi)不發(fā)送任何數(shù)據(jù),則服務(wù)端會強(qiáng)行斷開鏈接。

  • zhouciming 2018-10-18

    @614:我這種情況一定不是你說的這種了。因?yàn)橥ㄟ^最外層的start.php把gateway和client同時起來的,所以如果gateway未完全啟動,而這時客戶端就向gateway發(fā)起了異步連接請求,我是在onClose中檢測到的,所以不知道是不是gateway主動關(guān)閉連接,但可以確定的是進(jìn)來了onClose回調(diào)了!所以想來問問為什么會進(jìn)入onClose?

年代過于久遠(yuǎn),無法發(fā)表回答
??