2017-10-09 412 views
0

我試圖實現一個簡單的HTML5 WebSocket,但連接根本沒有建立&我越來越下面誤差的WebSocket對象被創建WebSocket連接到'ws:// localhost:52312 /'失敗:WebSocket握手期間出錯:意外的響應代碼:200

WebSocket連接到 'WS://本地主機:52312 /' 失敗:WebSocket的握手期間錯誤:意外響應代碼:200

下面是代碼

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) 
    }); 

有沒有人有這方面的想法?

+1

你連接了什麼?看起來像你沒有連接到想要websocket連接的東西,就像一個普通的web服務器。 – xaxxon

回答

0

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

一旦客戶端的開放握手已發送,客戶端必須 等待從服務器發送任何數據之前的響應。 客戶端必須如下驗證服務器的響應:

  1. 如果從服務器接收到的狀態代碼是不是101, 客戶端處理每HTTP [RFC2616]程序的響應。特別是,如果 接收到401狀態碼,則客戶端可能會執行驗證;服務器可能會使用3xx狀態碼重定向客戶端 (但客戶端不需要遵循 ),否則,請按以下步驟操作。

4.2.2節詳解:除了與代碼101和適當的報頭響應,服務器可以請求authenication(響應碼401),可能會重定向(3XX代碼),並且如果嘗試應該執行TLS握手建立安全連接(如果使用wss://協議)。

位於localhost:52312的服務器迴應了代碼200 - 正如您在上面看到的,websocket標準沒有在此響應中定義任何意義。所以客戶提出異常是正確的。問題出在服務器上。

相關問題