天天看點

webSocket

webSocket是什麼

webSocket是HTML5新出的一種協定,底層是基于TCP/IP協定的。跟http沒有關系,隻是複用了http握手通道,用來更新協定。

webSocket的作用

輪詢:用戶端以一定的時間間隔向服務端送出請求,以頻繁請求的方式來保持用戶端和伺服器端的同步。缺點:

  • 浏覽器需要不斷的向伺服器送出請求,然而HTTP請求可能包含較長的頭部,其中真正有效的資料可能隻是很小的一部分,顯然這樣會浪費很多的帶寬等資源。

長輪詢:浏覽器向伺服器發送請求,伺服器将請求保持打開一段時間。如果在該時間段内收到通知,則将包含該消息的響應發送到用戶端。如果在設定的時間段内未收到通知,則伺服器發送響應以終止打開的請求。缺點:

  • 當具有較高的消息量時,長輪詢不會提供比傳統輪詢更大的性能改進
  • 伺服器端會阻塞請求直到有資料傳遞或逾時才傳回

使用webSocket浏覽器和伺服器隻需要完成一次握手,兩者之間就直接可以建立持久性的連接配接,并進行雙向資料傳輸。

優點:

  • 能更好的節省伺服器資源和帶寬
  • 支援雙向通信,實時性更強
  • 可以發送文本,也可以發送二進制資料

webSocket的使用

服務端:

var app = require('express')();
var WebSocket = require('ws');
var wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
    ws.on('message', function incoming(message) {
        console.log(message);
    });
    ws.send('the content from server');
});
app.listen(3000,() => {
    console.log('you are listening port 3000');
});
           

用戶端:

<script>
    var ws = new WebSocket('ws://localhost:8080');
    ws.onopen = function () {
        ws.send('the request from client');
    };
    ws.onmessage = function (e) {
        console.log('from server: ' + e.data);
    };
</script>
           

webSocket應用場景

社交聊天、彈幕、多玩家遊戲、協同編輯、股票基金實時報價、體育實況更新、視訊會議/聊天、基于位置的應用、線上教育、智能家居等需要高實時的場景

參考資料:

原文位址:https://segmentfault.com/a/1190000016594700

繼續閱讀