2016-11-28 9 views
0

カスタムC#Webソケットサーバーと通信するためにJavaScriptのスニペットをコーディングしていますが、私は推奨した方法で接続を再試行しています。WebSocketリトライには制限がありますか?

JSは準備ができていない可能性がありますので、最終的に成功するまでwebsocketに接続しようとしています。

推奨される方法は、oncloseイベントまたはonerrorイベントをトラップする必要があり、いずれかのイベントで再接続を試みることです。何らかのバックオフ戦略を使用することをお勧めします。 Iv'eはあまりにも、エラーハンドラに再接続を行うと、「setTimeoutメソッド」コールに付けてみました

<html> 
    <head> 
     <title>WS</title> 
    </head> 
    <body> 
     <h1>WS</h1> 

     <button onclick="init()">Connect</button> 
     <button onclick="deInit()">Disconnect</button> 
     <button onclick="send()">Message</button> 

     <script> 

      var mySocket; 

      function init(){ 

       mySocket = new WebSocket("ws://localhost:9000/foolish"); 

       mySocket.onopen = function(){ 
        console.log("OPEN"); 
       }; 

       mySocket.onclose = function(status){ 
        console.log("CLOSE"); 
        console.log(status); 
        if(status.code === 1006){ 
         mySocket = new WebSocket("ws://localhost:9000/foolish"); 
        } 
       }; 

       mySocket.onerror = function(err){ 
        console.log("ERROR"); 
        console.log(err); 
       }; 

       mySocket.onmessage = function(msg){ 
        console.log("MESSAGE"); 
        console.log(msg); 
       }; 

      } 

      function deInit(){ 

       mySocket.close(); 

      } 

      function send(){ 

       mySocket.Send("foo"); 

      } 

     </script> 

    </body> 
</html> 

:このアドバイスに基づいて

は、私は次のコードを思い付いてきました出力は常に同じです。

私のイベントハンドラは一度トリガして接続を再試行しますが、2度目は失敗し、イベントハンドラはトリガされません。次の図に示すように、

enter image description here

私が読んだすべては私が再試行し、接続に失敗するたびに、私のエラーハンドラおよび/または近いハンドラは私にエラーを処理するためのオプションを可能発射し続けるべきであると言われますが、それ二度試してあきらめないのです。

IE11、IE10、Chrome 50+、FireFoxの最新バージョンで発生します。

ブラウザ間でどのように一貫性があるとすれば、私はそれが設計上であるか、それが私が間違っていることを推測していますが、実際には問題が何も見えません。

誰にでもアイデアがあれば、正しい方向に向けることができれば幸いです。

答えて

3

閉じるときに新しいインスタンスを作成すると、イベントハンドラを再適用しないでください

+0

もちろんです。どのように私はその1つを見逃すことができた:-)よく目撃された。いつも何か単純ではありません。 – shawty

関連する問題