WebSocket是什麼以及其與HTTP的區別

2023.11.15

WebSocket是什麼以及其與HTTP的區別

如果我們只想獲取一次資料來用應用程式處理它,我們應該使用HTTP協議,只獲取一次的資料可以透過簡單的HTTP請求查詢,所以在這種情況下,最好不要使用WebSocket。號

HTTP協定

HTTP是單向的,客戶端發送請求,伺服器發送回應。舉個例子,當使用者向伺服器發送請求時,該請求採用HTTP或HTTPS的形式,在接收到請求後,伺服器將回應傳送給客戶端,每個請求都與相應的回應相關聯,在發送回應後,連接關閉,每次HTTP或HTTPS請求都會建立到伺服器的新連接,並且在獲得回應後,連接會自行終止。

HTTP是一種在TCP之上運行的無狀態協議,TCP是一種面向連接的協議,它保證使用三方握手方法傳遞資料包,並重新傳輸丟失的資料包。

HTTP可以在任何可靠的面向連線的協定(如TCP、SCTP)之上運作。當客戶端向伺服器發送HTTP請求時,客戶端和伺服器之間的TCP連線是開啟的,在得到回應後,TCP連線被終止,每個HTTP請求都會開啟到伺服器的單獨TCP連線。例如,如果客戶端向伺服器發送10個請求,則10個單獨的TCP連線將被打開,並在獲得回應/回退後關閉。

以ASCII編碼的HTTP訊息訊息,每個HTTP請求訊息包含HTTP協定版本(HTTP/1.1、HTTP/2)、HTTP方法(GET/POST等)、HTTP標頭(內容類型、內容長度)、主機資訊等,以及包含正在傳輸到伺服器的實際訊息的主體。HTTP標頭的大小從200位元組到2KB不等,HTTP標頭的常見大小為700-800位元組。當Web應用程式在客戶端使用更多的cookie和其他工具來擴充代理程式的儲存功能時,它會減少HTTP標頭負載。

圖1 HTTP連線示意圖圖1 HTTP連線示意圖

WebSocket

WebSocket是雙向的,是一種全雙工協議,用於相同的客戶端-伺服器通訊場景,與HTTP不同,它從ws://或wss://開始。它是一個有狀態的協議,這意味著客戶端和伺服器之間的連線將保持有效,直到任何一方(客戶端或伺服器)終止。客戶端和伺服器關閉連線後,連線將從兩端終止。

讓我們舉一個客戶端-伺服器通訊的例子,有一個客戶端,它是一個網頁瀏覽器和一個伺服器,每當我們啟動客戶端和伺服器之間的連線時,客戶端-伺服器都會進行握手,並決定建立一個新的連接,這個連接將保持有效,直到它們中的任何一個終止。當連接建立並處於活動狀態時,使用相同的連接通道進行通信,直到通信終止。

這就是在客戶端-伺服器握手之後,客戶端-伺服器如何決定一個新的連線以保持其活動,這個新的連線將被稱為WebSocket。一旦通訊鏈路建立和連接打開,訊息交換將以雙向模式進行,直到客戶端-伺服器之間的連接持續存在。如果他們中的任何人(客戶端伺服器)宕機或決定關閉連接,雙方都將關閉連接。套接字的工作方式與HTTP的工作方式略有不同,狀態碼101表示WebSocket中的交換協定。

圖2 WebSocket連線示意圖圖2 WebSocket連線示意圖

PART.01何時使用WebSocket

1.即時Web應用:即時Web應用程式使用Web套接字在客戶端顯示數據,這些數據由後端伺服器不斷發送。在WebSocket中,資料被不斷地推送/傳輸到已經打開的相同連接中,這就是為什麼WebSocket更快並提高了應用程式效能。例如,在交易網站或比特幣交易中,為了顯示價格波動和行動數據,後端伺服器使用WebSocket通道不斷向客戶端推送。

2、遊戲應用程式:在遊戲應用程式中,可能會關注這一點,伺服器不斷接收數據,在不刷新UI的情況下,它將在螢幕上生效,UI甚至在不建立新連接的情況下自動刷新,因此它在遊戲應用程式中非常有用。

3.聊天應用程式:聊天應用程式使用WebSocket只建立一次連接,以便在訂閱者之間交換、發布和廣播訊息。它重複使用相同的WebSocket連接,用於發送和接收訊息以及進行一對一的訊息傳輸。

PART.02何時不使用WebSocket

如果我們想要透過網路傳輸任何即時更新或連續的資料流,可以使用WebSocket。

如果我們只想獲取一次資料來用應用程式處理它,我們應該使用HTTP協議,只獲取一次的資料可以透過簡單的HTTP請求查詢,所以在這種情況下,最好不要使用WebSocket。