如何解决Azure App Service WebSocket连接超时问题
规避Azure App Service WebSocket 230秒空闲超时方案
你推测的触发Azure默认230秒空闲超时是正确的,多租户Azure App Service的前端公共负载均衡默认空闲超时时间固定为230秒,该阈值无法直接全局修改,可通过以下几种方式解决:
- 实现标准WebSocket心跳保活机制(优先推荐)
这是成本最低、兼容性最强的方案,在两个实例的WebSocket客户端和服务端侧,定期发送标准WebSocketping/pong控制帧,发送间隔建议设置为30~60秒(远小于230秒阈值即可)。负载均衡识别到持续的控制帧流量后会判定连接处于活跃状态,不会触发超时切断。
示例代码(Node.js环境):// 客户端定时发送ping帧 const pingInterval = setInterval(() => { if (ws.readyState === WebSocket.OPEN) { ws.ping(); } }, 30 * 1000); // 服务端收到ping后自动回复pong即可,无需额外业务处理 ws.on('ping', () => { ws.pong(); }); - 拆分长耗时业务逻辑
若不便新增心跳逻辑,可将耗时数分钟的业务处理改为异步执行:实例A发送任务请求后即可主动释放WebSocket连接,实例B处理完任务后,通过反向调用、或共享中间件(如队列、缓存状态标记)的方式通知实例A获取结果,从根源上避免长时间无流量的空闲连接存在。 - 使用App Service Environment(ASE,高成本场景适用)
如果业务必须保留无心跳的长空闲WebSocket连接,可将App Service部署到App Service Environment环境中,ASE属于独享部署资源,你可以自定义前端负载均衡的空闲超时时间,最长可配置为60分钟。
内容的提问来源于stack exchange,提问作者rettetdemdativ
相关产品推荐
相关产品推荐

