为什么通过 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 配置中