4、WebSocket協議開發

概述:

HTTP通信是客戶端控制的一請求一應答模式。

不適用低延遲應用。

如果有新數據可用時,立即將數據發送到客戶端。需要通過長輪詢等方式實現。

 

而WebSocket將網絡套接字引入客戶端和服務端,瀏覽器和服務器可以通過套接字建立持久的連接,雙方隨時都可以互發數據給對方。

HTTP協議的弊端

(1)半雙工協議。數據可以在客戶端和服務端兩個方向上傳輸,但是同一時刻,只有一個方向上的數據傳送

(2)消息冗長繁瑣,包含請求頭、請求體、換行符等,可用數據比例低,可能只有請求體中的數據

(3)如果使用長輪詢實現實時推送,可能會引來黑客針對長輪詢的攻擊

長輪詢:客戶端每隔1s向服務端發送請求,然後服務端響應,通常用於實時推送新數據而設計。

由於HTTP Request的header是冗長的,所以客戶端頻繁請求,會佔用很多的帶寬和服務器資源。

WebSocket協議

HTML5定義了WebSocket協議,提供一種基於TCP的,瀏覽器和服務器間的全雙工網絡通信技術,同一時刻,可以在不同方向上通信,即可以同時接收和發送消息

WebSocket協議的特點

  • 單一的TCP連接,採用全雙工模式通信
  • 對代理、防火牆和路由器透明
  • 無頭部信息、Cookie和身份認證
  • 無安全開銷
  • 通過"Ping/Pong"幀保持鏈路激活
  • 服務器可以主動傳遞消息給客戶端,不再需要客戶端輪詢

WebSocket建立連接

客戶端向服務端發起一個HTTP請求,包含一個附加頭信息,其中Upgrade:WebSocket表明這是一個申請協議升級的HTTP請求

服務端解析這些附加的頭信息,然後生成應答信息返回給客戶端,連接建立成功。

這個連接會一直存在,直到有一方主動關閉連接。

WebSocket生命週期

握手成功後,客戶端服務端通過"message"的方式通信

一個消息由一個或多個區別於網絡層的幀組成。

幀有自己對應的類型,屬於同一個消息的多個幀具有類型相同的數據。數據類型可以是文本、二進制、控制幀(協議級信令,如信號)

WebSocket連接關閉

通常是由服務端關閉,當時如果在一個合理的時間週期後沒有收到服務端的TCP Close,客戶端可以發起TCP Close。

握手關閉消息帶有一個狀態碼和一個可選的關閉原因,必須發送一個Close控制幀。

WebSocket服務端開發

源碼參見

 

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