Websocket 協(xié)議

  • Http 協(xié)議是單向傳輸協(xié)議,只能由客戶端主動(dòng)發(fā)送消息給服務(wù)端。而在我們的聊天室中,一個(gè)用戶發(fā)送消息后, 聊天室其他用戶會(huì)收到消息通知。如果用 Http 協(xié)議去實(shí)現(xiàn)的話, 由于 Http 協(xié)議是單向傳輸?shù)模?所以每個(gè)客戶端需要定時(shí)向后端請(qǐng)求, 看有沒有人給他發(fā)消息。這樣做的缺點(diǎn)是非常消耗資源, 每次要經(jīng)過三次握手和四次揮手而且收到消息的及時(shí)性跟請(qǐng)求的頻率有關(guān)。
  • 我們需要一種協(xié)議, 它支持雙向傳輸并且是長(zhǎng)連接,符合條件的有幾種, 為什么要選擇 Websocket 協(xié)議呢? 因?yàn)?Web 端的話目前就 Websocket 協(xié)議支持。
  • 建立 Websocket 時(shí),客戶端向服務(wù)端發(fā)請(qǐng)一個(gè) Http 請(qǐng)求, 頭部信息里附加了"Upgrade: websocket", (如下圖) 表明這是一個(gè)申請(qǐng)協(xié)議升級(jí)的 Http 請(qǐng)求。連接建立后, 雙方可以自由通訊, 直到有一方斷開連接。

img