一、websocket 是什麼?
解決客戶端與服務端實時通訊而產生的技術。
先經過HTTP/HTTPS協議進行握手後建立一個用於交換數據的TCP鏈接,而後服務端與客戶端經過此TCP鏈接進行實時通訊。
服務器和客戶端能夠在給定的時間範圍內的任意時刻,相互推送信息。
之前咱們實現推送技術,用的都是輪詢,在特定時間間隔由瀏覽器自動發出請求,主動拉取服務器消息。須要不斷的向服務器發送請求,會佔用大量的帶寬和服務器資源。web
二、使用websocket
在支持WebSocket的瀏覽器中,在建立socket以後。能夠經過onopen,onmessage,onclose、onerror四個事件實現對socket進行響應瀏覽器
只讀屬性 readyState 表示鏈接狀態,能夠是如下值: 0 - 表示鏈接還沒有創建。 1 - 表示鏈接已創建,能夠進行通訊。 2 - 表示鏈接正在進行關閉。 3 - 表示鏈接已經關閉或者鏈接不能打開。 // window.WebSocket "WebSocket" in window 檢測瀏覽器是否支持 WebSocket var ws = new WebSocket(「ws://localhost:8080」); // 申請一個WebSocket對象,參數是須要鏈接的服務器端的地址 // 同http協議使用http://開頭同樣,WebSocket協議的URL使用ws://開頭 // 另外安全的WebSocket協議使用wss://開頭。 // 指定鏈接成功後的回調函數 ws.onopen = function() { console.log(「open」); ws.send(「hello」); // 用於向服務器發送數據 }; // 或者 ws.addEventListener('open', function (event) { ws.send('Hello Server!'); }); // 指定收到服務器數據後的回調函數 ws.onmessage = function(evt) { console.log(evt.data) }; // 指定鏈接關閉後的回調函數 ws.onclose = function(evt) { console.log(「WebSocketClosed!」); }; // 指定報錯時的回調函數 ws.onerror = function(evt) { console.log(「WebSocketError!」); }; // 關閉websocket websocket.close();