WebSoket 的广泛应用
目前大多數網站都在使用的傳統 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 協議的不同協議,兩者沒有沖突。
總結
以上是生活随笔為你收集整理的WebSoket 的广泛应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【白话科普】聊聊 DNS 的那些小知识
- 下一篇: Safari 14.0 的功臣 Webp