2016-11-28 4 views
0

Ich programmiere ein JavaScript-Snippet, um mit einem benutzerdefinierten C# -Web-Socket-Server zu kommunizieren, und ich befolge die empfohlene Vorgehensweise, die Verbindung erneut zu versuchen.Gibt es ein Limit für WebSocket-Wiederholungen?

Der Server, möglicherweise nicht bereit, wenn die JS bereit ist, so was ich tun muss, ist weiterhin versuchen, eine Verbindung mit dem Websocket, bis es schließlich gelingt.

Empfohlene Praxis, sagt mir, dass ich entweder das onclose-Ereignis oder das onerror-Ereignis abfangen muss, und in jedem von denen versuche, wieder zu verbinden, vorzugsweise mit einer Art Back-Off-Strategie.

auf dieser Beratung Basierend habe ich kam mit dem folgenden Code auf:

<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> 

Iv'e die erneuten Verbindung in der Fehlerbehandlungsroutine versucht, durchgeführt wird, und zu einem „setTimeOut“ Anruf Anbringen zu und die Ausgabe ist immer gleich.

Meine Event-Handler, einmal auslösen, erneut versuchen, eine Verbindung, aber das zweite Mal fehlschlägt, keiner der Event-Handler ausgelöst wird, und ich bin nur auf einen gescheiterten Versuch schauen, wie das folgende Bild zeigt:

enter image description here

Alles, was ich gelesen habe, sagt mir, dass jedes Mal, wenn ich versuchen und scheitern, Handler meine Fehler zu verbinden und/oder in der Nähe Handler sollte mich feuern weiterhin erlaubt die Möglichkeit, den Fehler zu behandeln, aber es versucht es nicht zweimal und gibt auf.

Dies geschieht in IE11, IE10, Chrome 50+ und FireFox neueste Version.

Angesichts der Tatsache, wie konsistent es in den Browsern ist, dann denke ich, dass es entweder durch Design oder es ist etwas, was ich falsch mache, aber ich sehe wirklich nicht, was das Problem ist.

Wenn jemand irgendwelche Ideen hat, würde ich sehr geschätzt werden, wenn Sie mir in die richtige Richtung zeigen können.

Antwort

3

Wenn Sie die neue Instanz beim Schließen erstellen, wenden Sie die Ereignisbehandlungsroutinen nicht erneut an

+0

Natürlich. Wie zur Hölle habe ich es geschafft, das zu verpassen :-) gut entdeckt. Immer etwas einfaches ist es nicht. – shawty

Verwandte Themen