WebSocket 機制

WebSocket 是 HTML5 一種新的協(xié)議。它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信,能更好的節(jié)省服務(wù)器資源和帶寬并達到實時通訊,它建立在 TCP 之上,同 HTTP 一樣通過 TCP 來傳輸數(shù)據(jù),但是它和 HTTP 最大不同是:

1.WebSocket 是一種雙向通信協(xié)議,在建立連接后,WebSocket 服務(wù)器和 Browser/Client Agent 都能主動的向?qū)Ψ桨l(fā)送或接收數(shù)據(jù),就像 Socket 一樣;

2.WebSocket 需要類似 TCP 的客戶端和服務(wù)器端通過握手連接,連接成功后才能相互通信。

? ? ? ?相對于傳統(tǒng) HTTP 每次請求-應(yīng)答都需要客戶端與服務(wù)端建立連接的模式,WebSocket 是類似 Socket 的 TCP 長連接的通訊模式,一旦 WebSocket 連接建立后,后續(xù)數(shù)據(jù)都以幀序列的形式傳輸。在客戶端斷開 WebSocket 連接或 Server 端斷掉連接前,不需要客戶端和服務(wù)端重新發(fā)起連接請求。在海量并發(fā)及客戶端與服務(wù)器交互負載流量大的情況下,極大的節(jié)省了網(wǎng)絡(luò)帶寬資源的消耗,有明顯的性能優(yōu)勢,且客戶端發(fā)送和接受消息是在同一個持久連接上發(fā)起,實時性優(yōu)勢明顯。

WebSocket握手請求(使用http請求完成)

清單 1.WebSocket 客戶端連接報文

GET /webfin/websocket/ HTTP/1.1

Host: localhost

Upgrade: websocket

Connection:?UpgradeSec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==

Origin:http://localhost:8080

Sec-WebSocket-Version: 13

////”Upgrade:websocket”參數(shù)值表明這是 WebSocket 類型請求,WebSocket-Key”是 WebSocket 客戶端發(fā)送的一個 base64 編碼的密文,要求服務(wù)端必須返回一個對應(yīng)加/密的“Sec-WebSocket-Accept”應(yīng)答,否則客戶端會拋出“Error during WebSocket handshake”錯誤,并關(guān)閉連接。

清單:2.WebSocket 服務(wù)端響應(yīng)報文

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

////“Sec-WebSocket-Accept”的值是服務(wù)端采用與客戶端一致的密鑰計算出來后返回客戶端的,“HTTP/1.1 101 Switching Protocols”表示服務(wù)端接受 WebSocket 協(xié)議的客戶端連接。

webSocket 客戶端實例

// 創(chuàng)建一個Socket實例?

var socket = new WebSocket('ws://localhost:8080');//服務(wù)器地址

// 打開Socket ??

socket.onopen = function(event) {

// 發(fā)送一個初始化消息

socket.send('I am the client and I\'m listening!');

// 監(jiān)聽消息

socket.onmessage = function(event) {

console.log('Client received a message',event);//???event.data???接收數(shù)據(jù)

};

// 監(jiān)聽Socket的關(guān)閉

socket.onclose = function(event) {

console.log('Client notified socket has closed',event);

};

// 關(guān)閉Socket....

//socket.close()


webSocket 規(guī)范定義了ws和wss兩種url模式,ws 用于非加密連接,wss用于加密連接。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容