iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0
自我挑戰組

Robot Framework 與 Websocket 協議測試系列 第 4

傳輸協議介紹: WebSocket

  • 分享至 

  • xImage
  •  

WebSocket 簡介

小碎念: 可惜因為找周公下棋錯過發文時間,在第三天後就被中斷比賽了,不過還是堅持寫完吧!

WebSocket 顧名義就是應用於 Web 網頁應用的 Socket IPC (跨行程通訊實作),有別於 Restful API 像是露營一樣,準備工作繁複然後僅用於一次性的快問快答,它有著 Socket 的長連結特性,管道建立後就能密集雙向收發訊息,特別適合要求高頻通訊的IRC(即時聊天室、交易所、遊戲)應用場景,以下就帶著各位認識這個協議。

簡單的示意圖: 如同最右邊的圖,透過 HTTP 建立連接後,後面就能使用 WebSocket 雙向隨意通訊了

引用自: Browser APIs and Protocols: WebSocket - High Performance Browser Networking (O'Reilly)

接著用些比對的方式,讓大家更認識 WebSocket 的特性

短連結 VS 長連結

在行程間通訊(IPC)的各種實踐家族中,大致可分為「短連結」與「長連結」。

WebSocket 屬於長連結的一種。

短連結(HTTP/REST)

  • 特色:一次請求、一次連線、開啟一次通訊,完成後即關閉。
  • 適用:無狀態的 Web 2.0 應用。每次請求都攜帶必要參數,彼此請求獨立。
  • 優點:簡單、可水平擴充、易於緩存快取與觀測(如以 NGINX、CDN、APM)。
  • 限制:即時性差,雙向互動困難,需頻繁輪詢或以 SSE 等替代。

長連結(WebSocket 等)

  • 特色:初始化後維持同一條通道,雙向、持久連線,像用兩個人在 LINE 的群組中聊天。
  • 適用:即時性高、需要狀態連續性的場景(交易撮合、即時白板、遊戲、通知)。
  • 優點:低延遲雙向傳輸,可推送事件,節省輪詢成本。
  • 限制:必須妥善處理前後文與狀態,同步與重連、順序與去重更複雜;壓測與觀測也較具挑戰。

WebSocket VS 傳統 Socket

有些人可能有過 C 語言的開發經驗,就知道有 Socket 這個函式庫。

若只從應用端觀察,WebSocket 與傳統 Socket 都需要處理建立連線、監聽接收與發送訊息,但 WebSocket 為了「瀏覽器與 Web 生態」做了許多貼心的封裝:

WebSocket 的優勢

  • 原生整合 HTTP/HTTPS:透過 Upgrade 握手,易穿越防火牆與代理;可沿用既有負載平衡與 TLS。
  • 廣泛的瀏覽器支援:前端以標準 API 使用(WebSocket 物件、事件模型)。
  • 訊息框格式與分片:支援文字與二進位類型資料,具備基本訊息框界線與控制訊息框。
  • 事件導向:openmessageerrorclose 便於前端與上層非同步程式整合。

傳統 Socket(TCP/UDP)的優勢

  • 自由度高:可自訂協議、編解碼、重傳策略,最大化效能或針對特定設備優化。
  • 少一層封裝:在內網或專用線路中,省去 HTTP 升級與代理相容性顧慮。

典型取捨

  • 需要 Web 生態、跨網與 TLS、代理相容、瀏覽器端:選 WebSocket。
  • 需要極致客製、特定網路條件或非網頁環境的高吞吐量:選傳統 Socket 或 gRPC over HTTP/2 作為折衷。

Python 的 WebSocket 函式庫:同步 vs 非同步

在 Python 生態中,分為同步(blocking)與非同步(asyncio)兩種實作路線。WebSocket 也不例外,最常用的就是 websocket-client 跟 websockets 這兩套,分述如下。

同步實作(例如 websocket-client)

  • 心智模型:單執行緒、循序流程,易讀易除錯。
  • 適用情境:
    • 簡單驗證邏輯、POC、腳本式工具。
    • 單連線或少量連線,對延遲與吞吐要求不高。
  • 典型優缺點:
    • 優點:上手快,與傳統測試框架整合容易。
    • 限制:阻塞 I/O,難以同時處理多連線與高併發。

非同步實作(如 websockets、aiohttp、AnyIO/Trio 生態)

  • 心智模型:事件循環 + 協程,靠 await 切換任務。
  • 適用情境:
    • 多連線長時維持、需要即時推播與回應。
    • 對吞吐與延遲敏感、需要資源效率的服務側或壓測客戶端。
  • 典型優缺點:
    • 優點:高併發、資源利用率佳,易擴展多路連線與批次任務。
    • 限制:程式結構較複雜,需處理競爭狀態、封包順序、積累背壓、重試與重連策略。

實務建議

  • 少量、自動化驗證為主:先用同步庫快速疊代,驗證協議與流程。
  • 進入壓測、多路連線與長時間穩定性驗證:改用非同步庫,加入訊息排序校驗、去重、心跳、重連、指標觀測。

小結

這個章節簡單講述了 WebSocket 跟其他協議的一些不同差異處,還有 Python 端的實作策略考量。
希望能給大家一個概念上的理解。 後續的開發都會圍繞著這一個跟 HTTP RESTful 截然不同的新協議方法來討論。


上一篇
框架介紹: Robot Framework
下一篇
訊息協議介紹: Protobuf
系列文
Robot Framework 與 Websocket 協議測試10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言