Home >> Blog >> 什麼是 websocket,它與 HTTP 有何不同?

什麼是 websocket,它與 HTTP 有何不同?

HTTP 和 WebSocket 都是客戶端-伺服器通信中使用的通信協議。

HTTP 協議: HTTP 是單向的,客戶端發送請求,伺服器發送響應。舉個例子,當用戶向伺服器發送請求時,該請求以 HTTP 或 HTTPS 的形式發送,伺服器收到請求後向客戶端發送響應,每個請求都與相應的響應相關聯,發送響應後連接關閉,每個 HTTP 或 HTTPS 請求每次都會建立與伺服器的新連接,並且在獲得響應後,連接會自行終止。 HTTP 是一種運行在 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 字節到 2 KB 不等,HTTP 標頭的常見大小為 700-800 字節。當 Web 應用程序在客戶端使用更多 cookie 和其他工具來擴展代理的存儲功能時,它會減少 HTTP 標頭負載。

什麼是 Web 套接字,它與 HTTP 有何不同?

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

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

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

什麼是 Web 套接字,它與 HTTP 有何不同?

什麼時候可以使用網絡套接字:

  • 實時網絡應用:實時網絡應用使用網絡套接字在客戶端顯示數據,由後端伺服器不斷發送。在 WebSocket 中,數據不斷被推送/傳輸到同一個已經打開的連接中,這就是 WebSocket 速度更快並提高應用程序性能的原因。 例如在交易網站或比特幣交易中,用於顯示價格波動和運動數據由後端伺服器通過WebSocket通道不斷推送到客戶端。
  • 遊戲應用:在遊戲應用中,你可能會關注,數據是不斷被伺服器接收的,不刷新UI,它就會在屏幕上生效,UI自動刷新,甚至沒有建立新的連接,所以它是在遊戲應用程序中非常有用。
  • 聊天應用程序:聊天應用程序使用 WebSockets 只建立一次連接,用於在訂閱者之間交換、發布和廣播消息。它重用相同的 WebSocket 連接,用於發送和接收消息以及一對一的消息傳輸。

何時不使用 WebSocket:如果我們想要通過網絡傳輸的任何實時更新或連續的數據流,可以使用 WebSocket。如果我們想獲取舊數據,或者只想獲取一次數據以使用應用程序處理它,我們應該使用HTTP 協議,不需要非常頻繁或僅獲取一次的舊數據可以通過簡單的 HTTP 請求進行查詢,所以在這種情況下,最好不要使用 WebSocket。

注意:如果我們只加載一次數據,RESTful Web 服務就足以從伺服器獲取數據。

HTTP 和 WebSocket 連接的區別:

WebSocket 連接

WebSocket 是一種雙向通信協議,可以通過重用已建立的連接通道,將數據從客戶端發送到伺服器或從伺服器發送到客戶端。連接一直保持活動狀態,直到被客戶端或伺服器終止。

幾乎所有的實時應用程序(如(交易、監控、通知)服務)都使用 WebSocket 在單個通信通道上接收數據。

所有經常更新的應用程序都使用 WebSocket,因為它比 HTTP 連接更快。

HTTP 連接

HTTP 協議是一種單向協議,它工作在 TCP 協議之上,TCP 協議是一種面向連接的傳輸層協議,我們可以在收到響應 HTTP 連接關閉後使用 HTTP 請求方法創建連接。

簡單的 RESTful 應用程序使用無狀態的 HTTP 協議。

當我們不想在特定時間內保留連接或重新使用連接來傳輸數據時;HTTP 連接比 WebSocket 慢。

websocket

websocket

server

client

networking sockets

windows networking