2017-10-09 1 views
0

Ich versuche, einen einfachen HTML5-WebSocket zu implementieren, aber die Verbindung wird einfach nicht hergestellt & Ich bekomme als WebSocket-Objekt unter FehlerWebSocket-Verbindung zu 'ws: // localhost: 52312 /' fehlgeschlagen: Fehler beim WebSocket-Handshake: Unerwarteter Antwortcode: 200

erstellt

WebSocket-Verbindung zu 'ws: // localhost: 52312 /' ist fehlgeschlagen: Fehler bei der WebSocket-Handshake: unerwartete Antwortcode: 200

unten ist der Code

document.addEventListener("DOMContentLoaded", function (event) { 
     function runHub() { 
      if ("WebSocket" in window) { 

       console.log('WebSocket is supported by your browser.'); 

       //var serviceUrl = 'ws://localhost:52312/'; 
       var serviceUrl = 'ws://localhost:52312/home/GetNotificationCount'; 

       var protocol = 'Chat-1.0'; 
       var socket = new WebSocket(serviceUrl); 

       socket.onopen = function() { 
        console.log('Connection Established!'); 
       }; 

       socket.onclose = function (error) { 
        console.log('Connection Closed!'); 
        console.log('Error Occured: ' + JSON.stringify(error)); 
       }; 

       socket.onerror = function (error) { 
        console.log('Error Occured: ' + JSON.stringify(error)); 
       }; 

       socket.onmessage = function (e) { 
        if (typeof e.data === "string") { 
         console.log('String message received: ' + e.data); 
        } 
        else if (e.data instanceof ArrayBuffer) { 
         console.log('ArrayBuffer received: ' + e.data); 
        } 
        else if (e.data instanceof Blob) { 
         console.log('Blob received: ' + e.data); 
        } 
       }; 


       if (!socket.readyState === WebSocket.CLOSED) { 
        socket.send($('#notificationCount').text); 
        //socket.close(); 

       } 

      } 
     } 

     var run = setInterval(function() { 
      runHub(); 
     }, 10000) 
    }); 

Hat jemand eine Idee dazu?

+1

mit was verbinden Sie? Es sieht so aus, als ob du dich nicht mit etwas verbindest, das eine Websocket-Verbindung haben möchte, wie ein einfacher Webserver. – xaxxon

Antwort

0

Nach https://tools.ietf.org/html/rfc6455#section-4.1

Nachdem der Handshake-Öffnung des Client gesendet wurde, muss der Client auf eine Antwort von dem Server warten, bevor weitere Daten senden. Der Client muss die Antwort des Servers validieren, wie folgt:

  1. Wenn der Statuscode vom Server empfangen wird, nicht 101, der Client verarbeitet die Antwort per HTTP [RFC2616] Verfahren. In insbesondere könnte der Client Authentifizierung durchführen, wenn er einen 401-Statuscode erhält; Der Server könnte den Client mit einem 3xx-Statuscode umleiten (aber die Clients müssen diese nicht befolgen, usw.). Andernfalls gehen Sie wie folgt vor.

Abschnitt 4.2.2 führt aus: außer mit Code 101 und entsprechende Header reagiert, Server für authenication fragen (Antwortcode 401), kann umleiten (3xx-Codes) und sollte TLS Handshake durchführen, wenn Sie versuchen, um eine sichere Verbindung herzustellen (wenn Sie das Protokoll wss:// verwenden).

Der Server unter localhost:52312 hat mit dem Code 200 geantwortet - websocket-Standard, wie Sie oben sehen, definiert keinen Sinn in dieser Antwort. Ein Kunde ist also berechtigt, eine Ausnahme zu erheben. Das Problem liegt im Server.

Verwandte Themen