【計算機網絡】WebSocket 全雙工通信協議

1.概述

HTTP協議的弊端:僅支持客戶端發起請求,服務器回覆響應, 不支持服務器主動向客戶端發送消息。

如果客戶端想要獲取服務器發送的消息,需要通過頻繁的JavaScript和AJAX請求實現輪詢效率較低

HTTP1.1之前一個request一個response後, HTTP連接就結束了,HTTP1.1後使用長連接, 一次HTTP連接可以發送和接收多個request和response, 但二者數量始終相等, 以上兩種輪詢方式都比較浪費資源

WebSocket是HTML5新增的協議, 它允許客戶端和服務器直接進行全雙工通信, 任何一方都可以通過連接將數據推送到另一端

WebSocket 特點

  • 全雙工通信
  • 握手階段採用HTTP協議, 默認端口也是80(ws)和443(wss), 因此與HTTP協議有良好的兼容性
  • 數據格式較輕量, 性能開銷小, 通信高效

2.WebSocket握手

WebSocket利用HTTP協議來建立連接

請求報文

GET ws://www.zhangshuo.fun/chat/2 HTTP/1.1   請求行
Host: www.zhangshuo.fun
Connection: Upgrade                         
Upgrade: websocket                        
Origin: http://localhost:8080
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: Zjy6wfxsecUZfUE9fx9yBQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Connection: Upgrade 表示要升級協議

Upgrade: websocket 表示協議要升級爲websocket

Sec-WebSocket-Version: 13 表示協議版本

Sec-WebSocket-Key 隨機生成, 用於標識這個鏈接

響應報文

HTTP/1.1 101
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: 2BObMdUfPogZU5MGvSfQQm1dmGk=
Sec-WebSocket-Extensions: permessage-deflate;client_max_window_bits=15

響應碼101表示HTTP協議即將被更改爲WebSocket協議

到此一個WebSocket連接就建立成功

TCP協議本身就是全雙工通信, 但建立在TCP之上的HTTP協議的請求-響應機制限制了全雙工通信, 因此WebSocket連接建立後, 就不再使用HTTP協議的機制了, 而是直接發送數據通信.

3.Fin分片

WebSocket的每條消息有可能被切分爲多個數據幀, WebSocket 根據FIN判斷當前數據幀是否爲最後一個, Fin = 1 表示已經收到完整消息, Fin = 0 表示接收方還需要繼續監聽接收其餘的數據.

opcode在數據交換的場景下,表示的是數據的類型。0x01表示文本,0x02表示二進制。而0x00比較特殊,表示延續幀, 即消息還未接收完

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章