WebSocket 協議

1. WebSocket 協議開發.

  WebSocket 是 HTML5 開始提供的一種瀏覽器與服務器間進行全雙工通信的網絡技術,WebSocket通訊協議於2011年被IETF定爲標準 RFC6455 , WebSocket API 被W3C定爲標準.web

  在 WebSocket API中,瀏覽器和服務器只須要作一個握手的動做,而後瀏覽器和服務器之間就造成了一條快熟通道,二者就能夠直接互相傳送數據了,WebSocket基於TCP雙向全雙工進行消息傳遞,在同一時刻,既能夠發送消息,也能夠接受消息,相比於HTTP的半雙工協議,性能獲得很大的提高.瀏覽器

 

2. WebSocket 和 HTTP的弊端

2.1 HttP 協議的弊端

  1. HTTP協議爲半雙工協議;
  2. HTTP消息冗長而繁瑣 ,例如 HTTP消息包含消息頭,消息體,換行符等,一般狀況下采用文本方式傳輸,相比於其餘的二進制通信協議,冗長而繁瑣
  3. 針對服務器推送的黑客攻擊, 例如 長時間輪詢

2.2 WebSocket 的特色.

  1. 單一的TCP連接,採用全雙工模式通訊;
  2. 對代理,防火牆和路由透明;
  3. 無頭部信息,Cookie 和身份驗證;
  4. 無安全開銷;
  5. 經過 "ping/pong" 幀保持鏈路活躍;
  6. 服務器能夠主動傳遞消息給客戶端,不在須要客戶端輪詢;

 

 

3. WebSocket 鏈接創建

創建 WebSocket 鏈接時,須要經過客戶端或者瀏覽器發送握手請求, 消息示例以下:安全

  爲了創建一個WebSocket鏈接,客戶端瀏覽器首先要向服務器發起一個HTTP請求,這個請求和一般的HTTP請求不一樣,它包含了一些附加的頭信息, Upgrade: WebSocket 代表這是一個申請協議升級的HTTP請求,服務器解析這些附加的頭信息,而後生成應答信息返回給客戶端,客戶端和服務端的WebSocket鏈接就創建起來了,雙發能夠經過這個鏈接誒通道自由地傳遞信息,而且這個鏈接會持續存在直到客戶端或者服務端的某一方主動關閉鏈接服務器

  請求消息中的 "Sec-WebSocket-Key" 是隨機的, 服務端會用這些數據來構造出一個 SHA-1 的信息摘要,把 "Sec-WebSocket-Key" 上一個魔幻字符串 , 使用 SHA-1加密,而後進行BASE-64編碼,將結果做爲 "Sec-websocket-Accept" 的值,返回給客戶端.websocket

 

4.WebSocket 的生命週期

  握手成功以後,服務端和客戶端就能夠經過 "message" 的方式進行通信了,一個消息由一個或多個幀組成, WebSocket 的消息並不必定對應一個網絡層的幀,他能夠被分割成多個幀或者被合併.網絡

 

 

 

內容初自 : <Netty 權威指南>socket

相關文章
相關標籤/搜索