websocket 探究

1. websocket 是什么

Html開始提供一種瀏覽器與服務(wù)器進行全雙工通信的網(wǎng)絡(luò)技術(shù),屬于應(yīng)用層協(xié)議。它基于TCP傳輸協(xié)議,并復(fù)用Http的握手通道

2. 優(yōu)點

  • 支持雙向通信,實時性更強
  • 更好的二進制支持
  • 較少的控制開銷。創(chuàng)建連接后,客戶端與服務(wù)端進行數(shù)據(jù)交換時,協(xié)議控制的數(shù)據(jù)包頭部較小,而Http 協(xié)議每次通信都需要攜帶完整的頭部。
  • 支持擴展。websocket協(xié)議定義了擴展,用戶可以擴展協(xié)議或者實現(xiàn)自定義的子協(xié)議(比如支持自定義壓縮算法)

3. 連接過程

WebSocket協(xié)議是基于TCP協(xié)議上的獨立的通信協(xié)議,在建立WebSocket通信連接前,需要使用HTTP協(xié)議進行握手,從HTTP連接升級為WebSocket連接。瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸。

WebSocket定義了兩種URI格式, “ws://“和“wss://”,類似于HTTP和HTTPS, “ws://“使用明文傳輸,默認端口為80,”wss://“使用TLS加密傳輸,默認端口為443。

連接過程如下:

  • 客戶端建立到服務(wù)器的TCP連接
  • 客戶端請求將當(dāng)前TCP連接用作websocket
  • 服務(wù)器收到請求, 同意并確認將此 TCP 連接用作 websocket
  • 客戶端收到確認, HTTP 協(xié)議通信結(jié)束
  • 雙方使用 websocket 協(xié)議自由雙向通信

4. 數(shù)據(jù)幀格式

Websocket在通信的最小單位為幀,由一個或者多個幀組成一條完整的消息。
發(fā)送端,將消息切割成多個幀,并發(fā)給服務(wù)端;接收端,接收消息幀,并將關(guān)聯(lián)的幀重新組裝成完整的消息。

當(dāng)WebSocket的接收方收到一個數(shù)據(jù)幀時,會根據(jù)FIN的值來判斷,是否已經(jīng)收到消息的最后一個數(shù)據(jù)幀

FIN=1表示當(dāng)前數(shù)據(jù)幀為消息的最后一個數(shù)據(jù)幀,此時接收方已經(jīng)收到完整的消息,可以對消息進行處理。FIN=0,則接收方還需要繼續(xù)監(jiān)聽接收其余的數(shù)據(jù)幀。

此外,opcode在數(shù)據(jù)交換的場景下,表示的是數(shù)據(jù)的類型。0x01表示文本,0x02表示二進制。而0x00比較特殊,表示延續(xù)幀(continuation frame),顧名思義,就是完整消息對應(yīng)的數(shù)據(jù)幀還沒接收完。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、內(nèi)容概覽 WebSocket的出現(xiàn),使得瀏覽器具備了實時雙向通信的能力。本文由淺入深,介紹了WebSocket...
    Calvin李閱讀 2,573評論 2 10
  • WebSocket 機制 WebSocket 是 HTML5 一種新的協(xié)議。它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信,能更...
    勇敢的_心_閱讀 2,375評論 0 4
  • 我把心冰封, 你卻用體溫去消融, 你的每一次寒顫, 都會讓我流下熾熱的淚水, 終于, 堅冰化作涓涓愛河水, 你卻,...
    世界路人閱讀 233評論 0 2
  • 說起我是怎么學(xué)習(xí)寫作的,那是很久遠的事了,但我依然清晰的記得,在這里我不妨告訴大家,希望對大家有所幫助,有所裨益。...
    人生如夢z閱讀 843評論 0 5
  • 今天有點冷,冬天的陰雨天也有一道風(fēng)景,南方的冬天不像北方的那樣直接,也不沒有一夜之間早上起來推開門大地一片雪白的既...
    煙花雨下的諾言閱讀 150評論 0 0

友情鏈接更多精彩內(nèi)容