日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

WebSocket 协议简介

發布時間:2023/12/13 综合教程 55 生活家
生活随笔 收集整理的這篇文章主要介紹了 WebSocket 协议简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么需要WebSocket 協議?
眾所周知,HTTP 協議是一個遵循請求-響應模式的協議。這種模式有兩個特點:1. 由客戶端先發起請求,然后等待服務器的響應。2. 服務器不能在沒有接收到客戶端請求時,就發送數據。也就是說,客戶端和服務器之間的通信是單向的。

在某些應用中,通常有服務器向客戶端推送數據的需求,也就是需要客戶端和服務器之間能夠雙向通信。而使用現有的HTTP協議不能很好地實現這個需求,于是 HTTP 協議的升級版——WebSocket 協議被發明出來。

協議概述
WebSocket 協議包括兩部分:握手和數據傳輸。握手時會使用 HTTP 協議,所以說它是 HTTP 協議的升級版。

握手
客戶端發起握手時,會發送如下格式的 HTTP GET 請求:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Host 頭部就不用說了。

Upgrade 和 Connection 頭部表明要求服務器升級到 WebSocket 協議。

Sec-WebSocket-Key 頭部是一串 Base64 編碼的隨機字符串,用于握手驗證。

Sec-WebSocket-Version 頭部指明協議版本。

Origin 和 Sec-WebSocket-Protocol 頭部是可選的,后者表示客戶端支持的子協議。通常這兩個頭部都可以忽略。

服務器在收到握手請求時,回復如下的 HTTP 101 響應完成握手(協議升級):

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

Upgrade 和 Connection 頭部表明服務器已經升級到 WebSocket 協議。
Sec-WebSocket-Accept 頭部是為了給客戶端做驗證,它是的值是根據客戶端 Sec-WebSocket-Key 頭部的值使用某種算法計算出來的。

數據傳輸
握手成功后的數據傳輸過程就與 HTTP 協議沒有任何關系了。傳輸過程中,任意一方都可以自由地發送數據。協議中的數據傳輸單元稱作消息,一個消息包含一個或多個數據幀,每個數據幀都是消息的一個分片。WebSocket 數據幀的格式如下:

FIN,標志位。值為1時表示是一個消息的最后一個分片。

Opcode,4位。表示數據幀的類型,有如下值:

0x0。是一個連續的幀,即它的類型與上一個幀的類型相同。
0x1。是一個文本幀。
0x2。是一個二進制幀。
0x8。是一個關閉幀。
0x9。是一個 ping 幀。
0xa。是一個 pong 幀。
關閉幀、ping 幀和pong 幀都是控制幀,ping 幀和pong 幀可用來做心跳。
Mask,標志位。值為1時表示數據已經做了掩碼操作。

Payload length,數據長度。它的值為0-125時,就表示數據長度。它的值為126時,接下來的16位(Extended payload length 字段)表示數據長度。它的值為127時,表示接下來的64位(16位的 Extended payload length 字段和48位的 Extended payload length continued 字段)表示數據長度。

Masking-key,Mask標志為1時,表示一個32位的數據掩碼。Mask標志為0時,該字段不存在。

Payload Data,數據。

結束傳輸
當雙方不需要再傳輸數據時,一端發送關閉幀(不能分片發送),另一端也回復關閉幀。關閉幀可攜帶數據,攜帶的數據前兩個字節表示關閉狀態碼。連接正常關閉的狀態碼是1000。

通常關閉幀先由客戶端發起,服務器在回復關閉幀后就立即關閉 TCP 連接。如果關閉幀先由服務器發起,那么客戶端在回復關閉幀后要等待服務器先關閉 TCP 連接。

總結

以上是生活随笔為你收集整理的WebSocket 协议简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。