共用方式為


適用於容器的 WebSocket 通訊協定和 應用程式閘道

以 RFC6455 建立的 WebSockets,可啟用用戶端與伺服器之間的雙向通訊。 不同於傳統的 HTTP 或 HTTPS 要求,WebSockets 允許瀏覽器建立連線,並從伺服器接收連續數據,而不需要不斷提取遠端伺服器,或需要在兩個方向建立多個連線(用戶端到伺服器和伺服器到用戶端)。

WebSocket 優點

WebSocket 通訊協定與傳統 HTTP 要求有數個優點,包括:

  • 瀏覽器兼容性:幾乎所有新式網頁瀏覽器都支援WebSocket。
  • 實時數據:WebSocket 可啟用客戶端與伺服器之間的實時資料傳輸。
  • 效率:WebSockets 不需要持續輪詢伺服器來檢查更新。
  • 安全性:WebSocket 可以使用 TLS 加密,並使用標準 HTTP 埠,例如 80 和 443。
  • 彈性:WebSocket 可用於各種應用程式,包括聊天、遊戲和金融交易平臺。

WebSocket 通訊協議的運作方式

若要建立 WebSocket 連線,用戶端和伺服器之間會交換以 HTTP 為基礎的特定交握。 如果成功,應用程式層通訊協定會從 HTTP「升級」為 WebSocket,使用先前建立的 TCP 連線。 發生此情況之後,通訊協議會變更為 WebSocket,且流量不會再透過 HTTP 流動。 兩個端點都會使用 WebSocket 通訊協定來傳送或接收數據,直到 WebSocket 連線關閉為止。

圖表描述與網頁伺服器互動、使用 HTTP 連線、升級 WebSocket 通訊協定的連線,以及透過 WebSocket 通訊協定持續通訊的用戶端。

注意

將連線升級至 WebSocket 之後,作為中繼/終止 Proxy,容器 應用程式閘道 會將從前端接收的數據傳送至後端,反之亦然,而不需要任何檢查或作功能。 因此,建立 WebSocket 連線之後,將不會套用標頭重寫、URL 重寫或覆寫主機名等任何作。

WebSocket 連線可能是純文本或透過 TLS 加密。 透過純文本建立連線時,會以 ws://< fqdn>/path 的格式建立連接。 透過 TLS 建立連線時,會以 wss://< fqdn>/path 的格式建立連線。

健康情況探查

在容器的 應用程式閘道 中使用 WebSocket 要求不需要任何設定,不過您必須確定您已正確設定健康狀態探查,以確保後端會反映為狀況良好。

根據預設,容器 應用程式閘道 會嘗試起始 HTTP 交握至執行 WebSocket 服務的後埠。 在許多情況下,這會錯誤地將後端標示為狀況不良,因此應該定義 HealthCheckPolicy 以確保健康情況探查會考慮使用 TCP 探查。

以下是 WebSocket 後端的 HealthCheckPolicy 範例。

kubectl apply -f - <<EOF
apiVersion: alb.networking.azure.io/v1
kind: HealthCheckPolicy
metadata:
  name: websockets-health-check-policy
  namespace: test-infra
spec:
  targetRef:
    group: ""
    kind: Service
    name: websockets-backend
    namespace: test-infra
  default:
    interval: 5s
    timeout: 3s
    healthyThreshold: 1
    unhealthyThreshold: 1
    http:
      path: /health 
EOF

注意

只有在使用適用於容器 應用程式閘道 的閘道 API 時,才支援 WebSocket。

計量和監視

診斷記錄:

WebSocket 聯機會使用不同的通訊協議運作。 起始連線時,瀏覽器會收到 HTTP 101 狀態代碼,指出從 HTTP 切換至 WebSocket 的切換,並會反映在存取記錄中。

只有當連線關閉時,才會記錄 WebSocket 連線的詳細數據。 這可精確測量每個連線的持續時間。

下一步

深入瞭解 WebSocket 和閘道 API