為何透過 WebSocket 的連線會在 60 秒之後關閉?
虛擬私有雲 經典基礎架構
您的 Ingress 服務會公開一個使用 WebSocket 的應用程式。 不過,當用戶端與 WebSocket 應用程式之間有 60 秒未傳送任何資料流量時,就會關閉其間的連線。
在閒置 60 秒之後,可能會因下列其中一個原因而捨棄與 WebSocket 應用程式的連線:
- 您的網際網路連線具有不容忍長期連線的 Proxy 或防火牆。
- ALB 到 WebSocket 應用程式的逾時會終止連線。
若要防止在閒置 60 秒後關閉連線,請執行下列動作:
-
如果您透過 Proxy 或防火牆連接至 WebSocket 應用程式,請確定未將 Proxy 或防火牆配置為自動終止長期連線。
-
若要保持連線處於作用中狀態,您可以增加逾時值,或在應用程式中設定活動訊號。
- 變更逾時時間:增加 ALB 設定中
proxy-read-timeout的值。 例如,若要將超時時間從60s改為較大的值,如300s,請在您的 Ingress 資源檔案中加入此 註解:nginx.ingress.kubernetes.io/proxy-read-timeout: 300。 已變更叢集裡所有公用 ALB 的逾時。 - 設定心跳:如果您不想變更 ALB 的預設讀取逾時值,請在 WebSocket 應用程式中設定心跳。 當您使用 WAMP 之類的框架設定心跳通訊協定時,應用程式的上游伺服器會以定時的間隔定期傳送
ping訊息,而用戶端也會回應pong訊息。 將心跳間隔設定為 58 秒或更短,以便ping/pong流量在 60 秒逾時強制執行之前保持連線開啟。
- 變更逾時時間:增加 ALB 設定中