欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

有了HTTP為什么還要Websocket?一文帶你解密Websocket協議

admin
2024年10月24日 8:4 本文熱度 844

我們的外賣、打車、購物等都離不開HTTP或者Websocket等通信協議的實現。作為開發、SRE,在構建和維護應用程序時,應該使用哪種通信協議?

或者面試官問你:websocket與http有什么區別?什么時候需要使用websocket?你又當如何作答呢,跟我一起盤一盤唄!!

Websocket是什么?

WebSocket是一種網絡通信協議,它采用長連接的方式,提供了在單個TCP連接上進行全雙工通信的方式。與HTTP協議服務端只能被動響應的方式不同,websocket是支持主動從服務端推送數據給客戶端。所以常用于IM聊天,在線游戲,通知等場景

Websocket連接

WebSocket 協議會在客戶端與服務端之間建立全雙工通道,客戶端和服務器都可以通過長連接同時發送和接收數據。這種通信方式比 HTTP 輪詢具有更少的開銷

因為連接的雙方可以隨時發送消息,所以在需要快速傳輸大量數據時,WebSocket 連接是一個很好的選擇。

比如在一個簡單的聊天室中連接多個客戶端。一個 WebSocket 服務器負責管理他們的會話,一個客戶端向服務器發送一條消息,服務器立即將其轉發給所有其他連接的客戶端。對于用戶而言,他們可以實時地相互發送消息。如下圖:

?

WebSocket 連接的優點

雙向通訊

由于連接雙方都可以隨時發送消息,因此當您需要快速來回移動大量數據時,或者需要從服務端控制客戶端設備時(比如IOT終端控制),WebSocket 連接是一個絕佳的選擇。

更低的延遲

HTTP 連接中相對高頻數據獲取的常見模式是輪詢,其中客戶端定期請求新的服務器數據。也許這種通信方法的最大缺點是延遲。websocket基于雙工長連接的方式,不需要等待或者去服務端查詢狀態,服務端處理完成之后,可以主動發送內容到客戶端。

通過 WebSocket 連接,數據一旦可用就會立即會傳給客戶端。客戶不需要一直請求它。通信延遲大大降低。

持久連接

websocket建立全雙工連接之后,不出問題的情況下,就會持續保持。并且Websocket連接是可以有狀態的。對于傳統的 HTTP 連接,客戶端發出請求,服務器發送響應后,連接將關閉。如果客戶端需要更多數據,他們必須打開一個新連接。當然在HTTP/1.1引入了Keepalive的機制,來保持TCP連接,不過一般在處理一定數量的http請求之后,連接依然會被關閉,HTTP/2之后采用了長連接的方式,并支持服務端推送能力,在這兩個方面是同websocket類似的。

Websocket建立連接的過程

從上圖就可以看出,Websocket連接的建立是依賴于HTTP協議的。下邊給大家一個簡單的實例:

客戶端發起websocket連接

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

看過我分享http協議的同學,就可以發現,這個分明就是一個http請求嘛。但是多了幾個東西

Upgrade: websocket
Connection: Upgrade

這兩個頭就是websocket的核心,告訴http服務器,我發起的是websocket協議,別把我當http協議處理了

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Sec-WebSocket-Key是一個base64編碼的值,是客戶端隨機生成的,是用來驗證websocket服務端

Sec-WebSocket-Protocol是用戶自定義的協議標識,用來區分在同URL下,不同的服務,具體對應什么功能由業務自己實現。目的是告訴服務端,今晚我要翻菀貴人,不是什么安小主,別搞錯了

最后Sec-WebSocket-Version是告訴服務器自己使用的websocket版本

如果服務端支持websocket協議,并接受了客戶端的要求,就會返回下邊的響應。還記得http1xx狀態碼?翻翻我前幾文章吧

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

這就告訴客戶端即將升級到websocket協議,Sec-WebSocket-Accept 表示服務端確認,后邊的隨機字符串是對Sec-WebSocket-Key的加密,目的就是告訴客戶端,我知道啦,這是我的身份證,你查查是莞貴人沒錯吧。Sec-WebSocket-Protocol則是最終使用的協議。

到此,HTTP協議的使命,就已經完成了。后續的所有操作都是基于Websocket協議了。

Websocket與HTTP協議的對比

使用場景對比

HTTP

HTTP是一種應用層協議,最初設計用于在客戶端和服務器之間傳輸超文本。它是一種無狀態的協議,每個請求都是獨立的,不保留前一次請求的狀態信息。HTTP 通常用于傳輸網頁、圖片、文本等靜態資源,以及通過 RESTful API 進行數據傳輸。

WebSocket

WebSocket 是一種全雙工通信協議,建立在單個 TCP 連接上,允許在客戶端和服務器之間進行雙向通信。WebSocket 的設計旨在解決 HTTP 協議在實時性和交互性方面的不足。它廣泛應用于實時聊天、在線游戲、金融行業的實時數據更新等場景。

協議對比

HTTP

  • 協議類型: 無狀態、請求-響應型協議。

  • 通信方式: 單向通信,客戶端發送請求,服務器返回響應。

  • 持久連接: 支持持久連接,通過 HTTP Keep-Alive 頭字段可以在一次連接中發送多個請求和響應。

WebSocket

  • 協議類型: 全雙工通信協議。

  • 通信方式: 雙向通信,客戶端和服務器可以隨時發送消息。

  • 持久連接: 基于單個 TCP 連接,保持連接狀態,避免了每次通信都需要重新建立連接的開銷。

連接方式對比

HTTP

  • 連接建立: TCP連接建立之后,客戶端直接發送http請求。

  • 連接關閉: http/2協議之前,服務器在響應之后會關閉連接(http1.1的keepalive機制也只能保證在一段時間內連接不關閉),客戶端需要重新建立連接發送新的請求。

WebSocket

  • 連接建立: 通過 HTTP 協議建立初始連接,然后升級為 HTTP 101的Upgrade機制 升級到websocket協議。建立連接后保持開放狀態。

  • 連接關閉: 可以由客戶端或服務器發起關閉連接請求,而不需要重新建立連接。

通信性質對比

HTTP

  • 單向通信: 請求-響應模式,客戶端發送請求,服務器返回響應。

  • 輪詢: 實現實時性的方式之一是通過輪詢,但效率低,增加了網絡負擔。

WebSocket

  • 雙向通信: 客戶端和服務器可以隨時發送消息,實現實時的雙向通信。

  • 事件驅動: 基于事件的模型,服務器或客戶端可以通過事件觸發實現及時的通信。

性能對比

HTTP

  • 資源消耗: http/2之前請求都需要重新建立連接,增加了資源消耗。

  • 實時性: 不適用于對實時性要求較高的應用,如在線游戲、實時聊天、IOT設備實時控制等。

WebSocket

  • 資源消耗: 通過單個 TCP 連接保持長連接,減少了資源消耗。

  • 實時性: 適用于對實時性要求較高的應用,具有低延遲和高吞吐量的特點。

協議頭對比

HTTP

  • 頭部開銷: 每個請求和響應都有較大的頭部開銷,包含大量元數據。

  • Cookie: 支持通過 Cookie 進行狀態管理。

WebSocket

  • 頭部開銷: 頭部開銷相對較小,只包含必要的控制信息。

  • Cookie: 可以通過 HTTP 協議的 Upgrade 頭字段攜帶 Cookie 進行身份驗證。

安全性對比

HTTP

  • 安全性: HTTP 本身不具備加密功能,數據傳輸可能被竊聽或篡改。

  • TLS/SSL: 可以通過使用 HTTPS(基于 TLS/SSL 協議)來加密通信。

WebSocket

  • 安全性: 支持加密傳輸,可以通過 WSS(WebSocket Secure)實現安全通信。

  • TLS/SSL: 基于 TLS/SSL 協議,提供端到端的加密。

狀態及緩存

HTTP

  • ? http請求無狀態且獨立的

  • ? http請求可以被緩存

Websocket

  • ? websocket是可以有狀態的,消息會可能會有上下文的關聯關系(取決于業務實現)

  • ? websocket本身無法像http協議那樣做內容緩存

WebSocket與HTTP:選擇合適的協議

在選擇 WebSocket 或 HTTP 協議之前,請考慮一下您正在構建的內容以及原因。請注意,每種通信協議在其他協議通常不足的幾個領域都表現出色。

WebSocket 與 HTTP 連接之間的技術權衡

了解這兩種通信協議之間的技術權衡可以讓您深入了解哪一種最適合您的項目。

連接設置和管理

考慮隨著時間的推移,您需要如何建立和管理連接

對于 WebSocket,持久連接是通過客戶端和服務器之間的握手建立的。即使消息之間存在明顯的延遲,它也會在會話期間保持打開狀態。

對于 HTTP,連接是通過握手建立的,然后用于Request-Response。HTTP/1.1 允許將同一個 TCP/IP 連接重復用于多個請求-響應對,從而減少開銷并改善延遲,但程度與 WebSocket 不同。連接仍將在相對較短的時間內關閉,從幾秒到幾分鐘不等。

數據傳輸和編碼

考慮您希望如何傳輸數據

WebSocket 連接使用全雙工雙向通信 - 連接的任何一方都可以隨時發送消息。HTTP 連接使用半雙工通信;一次只有一方可以通信,服務器的消息始終響應客戶端的請求。如果您需要從服務端主動發消息給客戶端,那websocket就最合適不過。

WebSocket 和 HTTP 都可以發送以基于文本的格式(例如 JSON、XML 和純文本)編碼的數據,以及二進制編碼的數據。

錯誤處理和恢復

考慮哪些錯誤處理方法對用戶影響最小

WebSocket 連接可能會因各種原因而失敗,包括應用程序代碼中的錯誤。客戶端會收到一個錯誤事件,他們可以Watch該事件,并且您可以按照自己認為合適的方式處理監聽到的錯誤。

當然,HTTP 連接可能會遇到類似的情況,但某些常見架構可以在錯誤處理方面提供優勢。 HTTP 指定了服務器可以響應的一系列狀態代碼,以大致指示請求是否成功。4xx 和 5xx 范圍分別是為客戶端和服務器錯誤保留的。

可擴展性

考慮您的應用程序的資源消耗需求

WebSocket 連接被設計的簡單高效,是事件驅動的——僅當有需要發送消息的內容時才會發送消息。

HTTP 連接可以通過長輪詢實現類似于實時功能的功能,隨著請求增長,處理所有這些長期 HTTP 請求的開銷會不斷增加。

在HTTP/2中使用HTTP Stream,連接可以始終保持打開狀態來傳輸數據流,這在概念上類似于 WebSocket,但它的push主要是基于已有的請求和可能的需求而被動觸發的。

WebSocket 與 HTTP 連接的性能注意事項

考慮您的應用程序的性能預期

得益于持久連接,WebSocket 可以減少開銷和延遲。這會帶來更好的性能、更快的實時更新以及更少的處理能力。

由于 HTTP 通常必須在會話的生命周期內處理多個連接,因此與 WebSocket 相比,它自然會花費更多的時間和資源。

WebSocket 與 HTTP 連接的安全性

考慮哪一個對您來說最容易確保安全

WebSocket 和 HTTP 連接在安全考慮方面類似。websocket的WS與HTTP都會到如跨站腳本的攻擊。通過TLS的加持,WSSHTTPS都可以實現加密通信,這兩種協議都足夠安全。

通信協議的混合方法

通常,建議的方法是在您的系統中同時支持這兩種協議,以發揮其最擅長的作用。這意味著對大多數標準網絡流量使用 HTTP 連接,對任何需要實時通信的內容使用 WebSocket 連接,例如通知IM通話IOT控制等。

當然,你還可以考慮評估補充或替代技術;畢竟,WebSocket 和 HTTP 并不是實時通信的唯一選擇。 WebRTC來實現音視頻通話服務,MQTT來實現IOT設備控制等等。

總結

您現在應該對如何使用 WebSocket 和 HTTP 通信協議有了一定的了解,明確了他們的優點和缺點,并且可以根據自己的需求在二者之間進行權衡。當然,你也可以依此應對各個公司關于HTTP協議,與websocket協議的考題了,祝您一切順遂。


該文章在 2024/10/24 9:19:37 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved