成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

小菜學網絡之WebSocket協議

網絡 網絡管理
不少應用場景要求服務主動向客戶端進行推送,這時 HTTP 協議就有點捉襟見肘了。舉個例子,為實現 Web 聊天室功能,當新消息到達時,服務器必須向客戶端推送通知。只用 HTTP 協議來實現,我們必須在客戶端做輪詢。

Web應用 采用 HTTP 協議進行通信:客戶端向服務器發送 HTTP 請求,服務器對請求進行處理后,向客戶端回復 HTTP 響應。換句話講,HTTP 協議只能客戶端主動發起請求,服務器被動進行響應。

圖片圖片

不少應用場景要求服務主動向客戶端進行推送,這時 HTTP 協議就有點捉襟見肘了。舉個例子,為實現 Web 聊天室功能,當新消息到達時,服務器必須向客戶端推送通知。只用 HTTP 協議來實現,我們必須在客戶端做輪詢。

輪詢有個致命的缺陷——性能比較差:如果輪詢頻率很高,服務器要消耗很多資源;但如果控制輪詢頻率,應用消息通知的實時性又大打折扣。

很顯然,服務器主動向客戶端推送數據,也是一個非常常見的應用場景,最好能從網絡協議層面進行支持。為此,計算機網絡先驅們設計了 WebSocket 協議。

WebSocket 協議,顧名思義為 Web 應用引入了 套接字( socket )通信能力。Websocket 是一種應用層協議,以 TCP 為底層傳輸協議,為通信雙方提供了一個 全雙工 的信道。

為了兼容 Web 主流應用協議 HTTP ,WeSocket 復用 80 和 443 端口,并使用 HTTP 請求來建立連接(配合 Upgrade 頭部)。因此,WebSocket 可以兼容現有的 HTTP代理 和中間件,例如 Nginx 。

URL

和 HTTP 協議一樣,WebSocket 服務器地址也用 URL 表示,只是協議部分為 ws 或 wss 。例如:

# ws代表WebSocket協議,端口為80
ws://api.fasionchan.com/chat

# wss代表WebSocket安全協議,與https類似,端口為443
wss://api.fasionchan.com/chat

連接建立

客戶端先通過 TCP 協議連到服務器,然后通過 TCP 連接向服務器發送 HTTP 請求。請注意,HTTP 請求頭中要帶 Upgrade 頭部,告訴服務器將連接升級到 WebSocket 協議:

GET /chat HTTP/1.1
Host: localhost:8080
User-Agent: Go-http-client/1.1
Connection: Upgrade
Sec-WebSocket-Key: bLPIf/xpAnrtCKuifPKTUg==
Sec-WebSocket-Version: 13
Upgrade: websocket

服務器接到請求后,檢查 Upgrade 頭部,發現客戶端想將連接協議升級到 WebSocket 。如果應用服務器支持 WebSocket ,它便回復 101 狀態碼,表示同意切換協議:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: lShvB7NL9TbGxezz+KUd5ee6jhA=

圖片圖片

HTTP 請求和響應交互完畢后,通信雙方就可以在 TCP 連接上互相發送 WebSocket 報文了。

數據幀

連接建好后,通信雙方就可以用 WebSocket 協議來發送數據了。WebSocket 將數據組織成一系列幀( frame )來傳輸,一條應用層消息可以封裝成一個或多個數據幀。數據幀報文結構如下所示:

圖片圖片

  • 標志位 ,占 4每個標識占一位;

a.FIN

b.RSV1 、RSV2 和 RSV3

a.0 這是前面數據幀的續幀(一個消息封裝成多個幀時);

b.1表示這是一個文本幀;

c.2 表示這是一個二進制( binary )幀;

d3~7 保留,未來可以分配給新的非控制( non-control )幀;

e.8 表示這是一個連接關閉( close )幀;

f.9 表示這是一個 ping 幀;

g.10 表示這是一個 pong 幀;

h.11~15 保留,未來可以分配給新的控制( control )幀;

  • MASK 位,表示 承載數據( payload data )是否做掩碼處理,1 表示掩碼處理,0 表示不做掩碼處理(客戶端發的幀必須做掩碼處理,主要出于避免網絡中間件混淆和安全上的考慮);
  • 數據長度( payload len ),占 7 位,用來表示數據負載的長度(以字節為單位);

a.該字段小于 126 時,該字段直接表示數據長度,其后的擴展字段為空( 0 字節),可表示 0~125 字節的數據;

b.當該字段等于 126 時,數據長度由其后的擴展字段表示,這是擴展字段為 2 字節,可表示長度為 126~65535 字節的數據;

c.

  • 擴展數據長度( extended payload len ),占用 0 、2 或 8 字節,由前一個字段決定;
  • 掩碼Key( masking key ),數據幀開啟掩碼處理時( MASK=1 )才有,占用  4 個字節,用于掩碼計算;
  • 承載數據( payload data ),即數據幀承載的應用層數據;

數據長度字段比較復雜,需要分三種情況討論,分別舉個例子幫助理解:

圖片圖片

注意到,為了簡化報文,我們假設 MASK=0 ,未啟動掩碼處理。

WebSocket 幀結構看似復雜,但無非還是先分成 頭部 和 數據 兩大部分,其中頭部保存 數據類型(操作碼)和 數據長度 ,而操作碼又分成控制和非控制兩種。

控制幀則繼續分為 close 、ping 和 pong 三種:close 用于關閉連接;ping 和 pong 用于檢測連接狀態,檢測方發 ping ,被檢測方回復 pong 。這樣當應用暫時沒有數據要發送時,ping/pong 可讓連接保持活躍。當連接斷開時,也能及時檢測到。

而非控制幀則分為 text 和 binary 兩種,上層應用使用文本協議,則選 text ;使用二進制協議,則選 binary 。

總結

  1. WebSocket 兼容 HTTP 協議,借助 HTTP 請求建立連接;
  2. WebSocket 通信分為兩個階段:
  • 連接建立階段:使用 HTTP
  • 數據通信階段:使用 WebSocket
  1. WebSocket 通信報文為 幀 ,一個幀由 頭部 和 數據 兩部分組成;
  2. WebSocket 幀頭部保存 操作碼 和 數據長度 等字段;
  3. 根據操作碼不同,WebSocket 幀可以分成 控制幀 和 非控制幀 兩類;
  4. WebSocket 控制幀分為 close 、ping 和 pong 三種;
  • ping / pong 控制幀用于連接保活和狀態檢測;
  • close 控制幀用于關閉連接;
  1. WebSocket 非控制幀分為 文本幀 和 二進制幀 兩種;
責任編輯:武曉燕 來源: 小菜學編程
相關推薦

2021-07-06 21:29:16

TCPIP協議棧

2021-05-18 22:11:27

DNS記錄類型

2021-04-13 22:17:19

網絡域名系統

2021-05-11 21:57:17

DNS報文格式

2021-04-21 20:21:07

DNS服務器網絡

2015-04-01 10:22:06

WebSocket網絡協議WebSocket協議

2014-06-13 13:47:31

UDP

2023-12-29 20:25:51

2022-03-18 10:43:12

WebSocketHTML5TCP 連接

2020-04-23 09:11:09

網絡協議網絡設備網絡

2010-06-12 15:54:09

TCP IP協議

2019-07-08 12:31:32

RTSP網絡協議流媒體

2011-08-24 09:56:13

網絡協議BOOTP協議TFTP協議

2014-06-16 09:22:59

2020-07-28 08:38:10

TCPUDP協議

2023-12-17 14:43:17

2022-10-08 00:00:00

websocket協議HTTP

2019-04-29 10:26:49

TCP網絡協議網絡通信

2014-06-16 09:33:22

ICMPPingTraceroute

2019-03-29 10:31:53

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人伊人网 | 免费同性女女aaa免费网站 | 天天玩夜夜操 | 国产精品久久久久久亚洲调教 | 在线一级片 | 亚洲高清视频一区二区 | 成人av网站在线观看 | 一区二区三区电影在线观看 | 日韩久久久久 | 欧美综合国产精品久久丁香 | 亚洲一区二区三区在线视频 | 欧美黄色片 | 久久高清 | 久草网址| 中文字幕成人网 | 深夜爽视频 | 国产精品一区二区在线 | 亚洲国产高清免费 | 国产丝袜一区二区三区免费视频 | 99久久精品免费看国产四区 | 国产精品久久777777 | 麻豆国产一区二区三区四区 | 日中文字幕在线 | 91av免费版 | 在线免费观看成人 | 久久久精彩视频 | 亚洲图片视频一区 | 亚洲一区二区精品视频在线观看 | 懂色av蜜桃av | 日本一区二区三区视频在线 | 婷婷久久久久 | 欧美精品在线一区二区三区 | av在线伊人 | 久久av一区二区三区 | 欧美一级黄 | 黑人巨大精品欧美一区二区免费 | 精品国产青草久久久久福利 | 日韩精品在线网站 | 青青草一区二区三区 | 福利av在线 | 欧美日韩成人影院 |