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協議
- 網路學習筆記(一):TCP連線的建立與關閉筆記TCP
- websocket 建立連線時如何進行授權?Web
- WebSocket系列之如何建立和維護可靠的連線Web
- websocket連線Web
- 使用screen讓關閉ssh連線時不關閉程式
- 深入 HTTP/3(一)|從 QUIC 連結的建立與關閉看協議的演進HTTPUI協議
- 【Swoole】從原始碼中查 Websocket 連線問題原始碼Web
- [Swoole] 從原始碼中查 Websocket 連線問題原始碼Web
- ? 抓包分析 TCP 建立和斷開連線的流程TCP
- WebSocket斷線重連Web
- 日常Bug排查-連線突然全部關閉
- mysql階段04 連線工具, 連線方式, 啟動關閉mysqlMySql
- Websocket 突破最大長連線Web
- 關聯線探究,如何連線流程圖的兩個節點流程圖
- 二十五:從庫的關閉和恢復流程(筆記)筆記
- 體驗用yarp連線websocketWeb
- websocket連線mina被拒絕Web
- 我為 Netty 貢獻原始碼 | 且看 Netty 如何應對 TCP 連線的正常關閉,異常關閉,半關閉場景Netty原始碼TCP
- 淺析《死亡擱淺》的“連線”——從玩法到核心
- [譯] Go 實現百萬 WebSocket 連線GoWeb
- Django使用channels實現Websocket連線DjangoWeb
- 如何從 Windows 上用 SSH 連線到 LinuxWindowsLinux
- 如何從 InfluxDB/OpenTSDB 無縫連線到 TDengineUX
- Netty從入門到禿頭: websocketNettyWeb
- 遠端連線關閉,專案就停止的解決辦法
- Laravel Envoy 安裝到部署完整流程Laravel
- [從0到1編寫伺服器]TCP連線建立與斷開狀態變化伺服器TCP
- Win10怎麼關閉記憶體完整性_win10關閉記憶體完整性的方法Win10記憶體
- 06 建立MySQL連線MySql
- ElasticSearch連線池建立Elasticsearch
- laravel建立軟連線Laravel
- 資料庫連線分析(1)-從JDBC到MyBatis資料庫JDBCMyBatis
- centsos關閉防火牆解決websocket伺服器連線不上的問題(ifconfig、防火牆、ping、ws啟動時,只用埠即可 )防火牆Web伺服器
- 從HTML5 WebSocket到Socket.ioHTMLWeb
- 軟體專案上線完整流程
- 從輸入URL到渲染的完整過程
- win10提示無法連線到寬頻連線不能建立到遠端計算機怎麼解決Win10計算機