以 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 連線關閉為止。
注意
將連線升級至 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