WebSocket:從建立連線到關閉的完整流程
WebSocket是一種基於TCP的協議,它提供了全雙工通訊通道,允許在客戶端和伺服器之間進行實時的雙向資料傳輸。下面是WebSocket的完整流程,包括建立連線、資料傳輸和關閉連線。
-
建立連線:
- 客戶端發起WebSocket握手請求。客戶端傳送一個HTTP請求,其中包含特殊的
Upgrade
頭部,指示將協議從HTTP升級為WebSocket。 - 伺服器接收到握手請求後,進行驗證和協議升級處理。伺服器檢查請求頭部,驗證是否符合WebSocket協議要求,並進行必要的協議升級。
- 伺服器返回握手響應。如果握手驗證透過,伺服器返回一個包含
Upgrade
頭部的HTTP響應,狀態碼為101 Switching Protocols,表示成功升級到WebSocket協議。 - 建立連線完成。客戶端和伺服器之間的TCP連線已經成功升級為WebSocket連線,雙方可以開始進行實時的雙向資料傳輸。
- 客戶端發起WebSocket握手請求。客戶端傳送一個HTTP請求,其中包含特殊的
-
資料傳輸:
- 客戶端和伺服器可以使用WebSocket連線進行雙向通訊。
- 客戶端和伺服器可以透過傳送WebSocket訊息來交換資料。訊息可以是文字或二進位制形式。
- 訊息可以透過
send()
方法傳送,並透過onmessage
事件接收。客戶端和伺服器都可以使用這些方法和事件進行資料傳輸。
-
關閉連線:
- 客戶端或伺服器可以選擇關閉WebSocket連線。
- 關閉連線的一方傳送一個特殊的關閉幀(Close Frame)給另一方。
- 另一方接收到關閉幀後,傳送一個關閉幀作為響應。
- 雙方收到關閉幀後,彼此之間的WebSocket連線被關閉。
需要注意以下幾點:
- 在WebSocket連線建立後,客戶端和伺服器之間可以隨時傳送和接收訊息,不需要像HTTP那樣每次請求都要建立新的連線。
- WebSocket連線是持久的,可以保持較長時間的通訊。
- WebSocket連線可以透過心跳機制來檢測連線是否存活。
- WebSocket連線可以進行資料壓縮和加密等處理,以提高效能和安全性。
這是WebSocket的基本流程,它提供了一種實時、雙向的通訊方式,適用於需要實時資料傳輸的應用場景,如聊天應用、實時遊戲等。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70025954/viewspace-3006659/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【譯】 WebSocket 協議第七章——關閉連線(Closing the Connection)Web協議
- websocket連線Web
- websocket 建立連線時如何進行授權?Web
- WebSocket系列之如何建立和維護可靠的連線Web
- 網路學習筆記(一):TCP連線的建立與關閉筆記TCP
- httpWebRequest請求錯誤,基礎連線已經關閉: 連線被意外關閉HTTPWeb
- 關於jetty連線關閉問題Jetty
- 使用screen讓關閉ssh連線時不關閉程式
- [Swoole] 從原始碼中查 Websocket 連線問題原始碼Web
- 【Swoole】從原始碼中查 Websocket 連線問題原始碼Web
- 關於MYSQL 5.7 新連線建立流程原始碼介面(和5.6不同)MySql原始碼
- WebSocket斷線重連Web
- WebSocket連線的負載均衡Web負載
- 從連線到資料(一)
- 從連線到資料(二)
- 從連線到資料(三)
- 深入 HTTP/3(一)|從 QUIC 連結的建立與關閉看協議的演進HTTPUI協議
- ? 抓包分析 TCP 建立和斷開連線的流程TCP
- 日常Bug排查-連線突然全部關閉
- 資料庫連線未關閉的問題資料庫
- 求助:(javax.transaction.xa.XAException: 關閉的連線))JavaException
- Websocket 突破最大長連線Web
- mysql階段04 連線工具, 連線方式, 啟動關閉mysqlMySql
- 關聯線探究,如何連線流程圖的兩個節點流程圖
- 實戰WebSocket聊天室:從開發到部署上線Web
- 12c 初探--連線,啟動/關閉,建立使用者,資料字典等
- 二十五:從庫的關閉和恢復流程(筆記)筆記
- golang websocket android連線的問題GolangWebAndroid
- TCP的連線建立TCP
- ORA-12537 TNS:連線關閉
- mac 關閉ipv6 連線乙太網Mac
- 從被阿里關閉的 Quixey 到 Aiqudo :用語音技術將深度連結「進行到底」阿里UIAI
- [譯] Go 實現百萬 WebSocket 連線GoWeb
- Django使用channels實現Websocket連線DjangoWeb
- websocket連線mina被拒絕Web
- 體驗用yarp連線websocketWeb
- Netty從入門到禿頭: websocketNettyWeb
- Laravel Envoy 安裝到部署完整流程Laravel