为什么通过 WebSocket 的连接会在 60 秒后关闭?
虚拟私有云 经典基础架构
Ingress 服务公开使用 WebSocket 的应用程序。 但是,客户机与 WebSocket 应用程序之间的连接会在它们之间不发送流量 60 秒后关闭。
由于以下某个原因停止活动 60 秒后,与 WebSocket 应用程序的连接可能断开:
- 因特网连接具有一个代理或防火墙,不容许长时间连接。
- ALB 到 WebSocket 应用程序的超时终止连接。
为避免连接在停止活动 60 秒后关闭:
-
如果通过代理或防火墙连接到 WebSocket 应用程序,确保未将代理或防火墙配置为自动终止长时间连接。
-
要保持连接活动,您可以增大超时值或者在应用程序中设置脉动信号。
- 更改超时: 增大 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 配置中