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

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

  • 下訂單(發起請求):用戶(客戶端)下了一個訂單(HTTP 請求)給餐廳(服務器)。

  • 接到訂單後對訂單進行處理(返回對應狀態碼):餐廳能夠做這個菜(擁有對應資源),就開始準備(服務器獲取資源),並返回已接單的信息(HTTP 狀態碼 200 等)。如果餐廳無法制作(沒有對應資源),則直接拒絕返回給用戶下單失敗的訊息(HTTP 狀態碼404 等)

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

上述流程中,服務器存儲內容,但是這些內容更新獲取必須由客戶端再次請求,服務器無法將更新主動發送給指定用戶,顯得十分笨拙。爲了改進這一項, 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 其優勢主要包括以下幾個方面:

  • 實時性,客戶端和服務端可以隨時互相推送消息,延遲更小,短時間內可以更多的推送消息。

  • 兼容性,與 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

服務端響應


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 相比哪個更快?

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