亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

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

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

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

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

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

Websocket是什么?

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

Websocket連接

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

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

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

?

WebSocket 連接的優(yōu)點

雙向通訊

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

更低的延遲

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

通過 WebSocket 連接,數據一旦可用就會立即會傳給客戶端??蛻舨恍枰恢闭埱笏Mㄐ叛舆t大大降低。

持久連接

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

Websocket建立連接的過程

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

客戶端發(fā)起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協(xié)議的同學,就可以發(fā)現(xiàn),這個分明就是一個http請求嘛。但是多了幾個東西

Upgrade: websocket
Connection: Upgrade

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

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

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

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

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

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

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

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

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

Websocket與HTTP協(xié)議的對比

使用場景對比

HTTP

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

WebSocket

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

協(xié)議對比

HTTP

  • 協(xié)議類型: 無狀態(tài)、請求-響應型協(xié)議。

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

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

WebSocket

  • 協(xié)議類型: 全雙工通信協(xié)議。

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

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

連接方式對比

HTTP

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

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

WebSocket

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

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

通信性質對比

HTTP

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

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

WebSocket

  • 雙向通信: 客戶端和服務器可以隨時發(fā)送消息,實現(xiàn)實時的雙向通信。

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

性能對比

HTTP

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

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

WebSocket

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

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

協(xié)議頭對比

HTTP

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

  • Cookie: 支持通過 Cookie 進行狀態(tài)管理。

WebSocket

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

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

安全性對比

HTTP

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

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

WebSocket

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

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

狀態(tài)及緩存

HTTP

  • ? http請求無狀態(tài)且獨立的

  • ? http請求可以被緩存

Websocket

  • ? websocket是可以有狀態(tài)的,消息會可能會有上下文的關聯(lián)關系(取決于業(yè)務實現(xiàn))

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

WebSocket與HTTP:選擇合適的協(xié)議

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

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

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

連接設置和管理

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

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

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

數據傳輸和編碼

考慮您希望如何傳輸數據

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

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

錯誤處理和恢復

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

WebSocket 連接可能會因各種原因而失敗,包括應用程序代碼中的錯誤??蛻舳藭盏揭粋€錯誤事件,他們可以Watch該事件,并且您可以按照自己認為合適的方式處理監(jiān)聽到的錯誤。

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

可擴展性

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

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

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

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

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

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

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

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

WebSocket 與 HTTP 連接的安全性

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

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

通信協(xié)議的混合方法

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

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

總結

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


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