一、WebSocket簡介
WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協(xié)議。
WebSocket 使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)规伐。在 WebSocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接狭魂,并進行雙向數(shù)據(jù)傳輸。
在 WebSocket API 中党觅,瀏覽器和服務(wù)器只需要做一個握手的動作雌澄,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道杯瞻。兩者之間就直接可以數(shù)據(jù)互相傳送镐牺。
二、WebSocket 通信原理
為了實現(xiàn) WebSocket 通信魁莉,在 HTTP 連接建立之后睬涧,需要完成一 次“握手”(Handshaking)的步驟。
握手·請求
為了實現(xiàn) WebSocket 通信旗唁,需要用到 HTTP 的 Upgrade 首部字 段畦浓,告知服務(wù)器通信協(xié)議發(fā)生改變,以達到握手的目的检疫。
Sec-WebSocket-Key 字段內(nèi)記錄著握手過程中必不可少的鍵值讶请。 Sec-WebSocket-Protocol 字段內(nèi)記錄使用的子協(xié)議。 子協(xié)議按 WebSocket 協(xié)議標準在連接分開使用時屎媳,定義那些連接 的名稱夺溢。
177 握手·響應(yīng)
對于之前的請求,返回狀態(tài)碼 101 Switching Protocols 的響應(yīng)烛谊。
Sec-WebSocket-Accept 的字段值是由握手請求中的 SecWebSocket-Key 的字段值生成的风响。 成功握手確立 WebSocket 連接之后,通信時不再使用 HTTP 的數(shù) 據(jù)幀晒来,而采用 WebSocket 獨立的數(shù)據(jù)幀钞诡。
成功握手確立 WebSocket 連接之后,通信時不再使用 HTTP 的數(shù) 據(jù)幀,而采用 WebSocket 獨立的數(shù)據(jù)幀荧降。
JavaScript 可調(diào)用“The WebSocket API”接箫,以下為調(diào)用 WebSocket API,每 50ms 發(fā)送一次數(shù)據(jù)的實例朵诫。
var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
setInterval(function() {
if (socket.bufferedAmount == 0)
socket.send(getUpdateData());
}, 50);
};