想多人遊戲?那你還不看看它!

目前大多數網站都在使用的傳統 HTTP 協議,即由 Web 服務器經過 HTTP 接收並響應來自客戶端的消息,整個發起請求與響應的過程相似咱們點外賣,由如下 2 部分構成:html

  • 下訂單(發起請求):用戶(客戶端)下了一個訂單(HTTP 請求)給餐廳(服務器)。
  • 接到訂單後對訂單進行處理(返回對應狀態碼):餐廳可以作這個菜(擁有對應資源),就開始準備(服務器獲取資源),並返回已接單的信息(HTTP 狀態碼 200 等)。若是餐廳沒法制做(沒有對應資源),則直接拒絕返回給用戶下單失敗的訊息(HTTP 狀態碼404 等)

在這整個過程當中,餐廳都不會看到用戶是誰,只須要接到訂單就能夠進行判斷並返回信息。也就是說服務器僅須要判斷 HTTP 請求,並做出響應(HTTP 相關狀態碼:200/403/404 等)。web

上述流程中,服務器存儲內容,可是這些內容更新獲取必須由客戶端再次請求,服務器沒法將更新主動發送給指定用戶,顯得十分笨拙。爲了改進這一項, Long Poll 以及 Ajax 輪詢應運而生。但是這兩種方式的成本極大,並且必需要客戶端保持聯繫,一旦斷開就須要從新發起請求。因此在這兩種方式的前提下,WebSocket 誕生了。瀏覽器

什麼是 WebSoket?

爲了可以知足隨時獲取數據的需求,,WebSocket 協議誕生,並在 2011 年成爲國際標準。 做爲 HTML 5 規範的組成部分之一,WebSocket 是一種全新的協議。它將 TCP 的 Socket(套接字)應用在了 Web page 上,從而使通訊雙方創建起一個保持在活動狀態鏈接通道,而且屬於全雙工(雙方同時進行雙向通訊)。藉助 WebSocket 咱們能夠在開放網絡上進行多人遊戲,實時聊天,多人協做等,目前大多數瀏覽器都支持該協議,包括 Google Chrome,Firefox,Safari,Opera,Microsoft Edge和Internet Explorer。安全

WebSocket 的優點

WebSocket 最大的特色就是,客戶端能夠主動發送消息到服務端,服務端也能夠主動向客戶端發送消息,實現雙向通信。服務器

上圖能夠看出,相比較輪詢,WebSocket 在第一次 HTTP 握手以後,就改走 WebSocket 了,對於 HTTP 的長鏈接(非持久鏈接),WebSocket 的持久鏈接更具實效性。websocket

WebSocket 其優點主要包括如下幾個方面:網絡

  • 實時性,客戶端和服務端能夠隨時互相推送消息,延遲更小,短期內能夠更多的推送消息。
  • 兼容性,與 HTTP 有着很好的兼容性,握手時採用HTTP協議,默認也是端口80,443 ,能夠很大部分繞過防火牆的限制。
  • 保持鏈接狀態,建立鏈接後,保持其狀態,以後的通訊能夠省略其信息。
  • 協議標識符爲 ws,若是加密爲 wss

WebSocket 鏈接過程示例

客戶端架構

GET /chat HTTP/1.1
Host: 127.0.0.1:4000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: aFeKKHNhbFYZSBub14oUK==
Origin: http://localhost:4000
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

服務端響應socket

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

重要字段說明:優化

  • Connection:Upgrade,表示客戶端協議升級。
  • Upgrade:WebSocket,升級到 WebSocket 協議。
  • Sec-WebSocket-Key:隨機字符串,對應服務端響應的 Sec-WebSocket-Accept 字段,將Sec-WebSocket-Key:指定方式計算後做爲服務端響應 Sec-WebSocket-Accept 的值。經過這樣,避免 HTTP 協議誤覺得 WebSocket 協議。
  • Sec-WebSocket-Version:表示支持的 WebSocket 版本。

WebSocket 用途和場景

社交,聊天等

聊天應用特色就是低延遲,高及時,採用的 WebSocket 協議,用戶將消息發送到服務器,服務器直接將消息發送給收件人。另外,服務器還能夠在通道中存儲多個鏈接,用戶能實現一次性向多人發送消息,或者查看房間內多我的的信息,實現了實時溝通交流。

多人遊戲

多人遊戲比較常見的模式就是,服務器用來存儲狀態,玩家將改變更做的狀態發送到服務器,而後更新遊戲狀態給全部玩家,使用 HTTP 的話,每一個玩家須要按期向服務器請求狀態。使用 WebSocket 後,玩家的每一個動做將實時的推送給全部玩家。

多人協做

須要多人在共享文檔上一塊兒工做嗎?可使用 WebSocket 實現多人共同協做,每一個人的動做更新時,都會推送給全部參與者。

地圖等定位相關

每當用戶的 GPS 座標更改時,更新服務器後,就會根據用戶的最新座標推送新的數據。

股票、基金報價展現

金融界數據瞬息萬變,幾乎是每毫秒都在變化。若是採用傳統的網絡架構則沒法知足實時性,使用 WebSocket 能夠流式更新這些數據變化而不須要等待。

目前又拍雲已經全面支持 WebSocket,爲採用 ws/wss 協議進行通訊的客戶提供優質的加速服務,能有效下降延遲,提升傳輸效率。產品特性及優點包括:

智能路由: 實時探測互聯網線路,鏈路耗時跟蹤分析,智能選擇最優路徑。

協議優化: 經過增大 TCP 窗口初始大小,調節慢啓動閥值等等,解決傳統協議存在的缺陷,提升傳輸效率。

支持WSS: 用戶可自主申請、綁定 SSL 證書,一鍵開啓 WSS 加速。同時又拍雲提供多種品牌的免費、付費證書申購,爲用戶提供一站式 WSS 安全加速解決方案。

數據統計: 支持實時帶寬、流量查詢,全平臺自助化查詢,日誌分析及下載支持,時刻掌控業務全局。

WebSocket 依賴 HTTP 協議而存在,可是同時 HTTP 和 WebSocket 都是基於 TCP 協議的不一樣協議,二者沒有衝突。

推薦閱讀

聊聊風口上的 eBPF

Wi-Fi 6 與 5G 相比哪一個更快?

相關文章
相關標籤/搜索