GCP上WebSocket连接虽有Ping-Pong仍约90秒断开问题求助
WebSocket连接GCP服务器后1006错误断开问题
问题细节
- 客户端和Node.js服务器均使用原生
WebSocketAPI开发 - 本地测试完全正常,部署到GCP远程服务器后,连接会在60-90秒左右以错误码
1006断开 webSocket.onerror无输出,但webSocket.onclose会触发- 客户端与服务器每10秒的Ping-Pong心跳机制正常(Firefox控制台可查)
- 怀疑是GCP负载均衡器设置问题,但通过GUI管理时找不到相关文章提及的
timeoutSec选项
基于GCP GUI的排查修复步骤
调整后端服务空闲超时时间
- 打开GCP控制台,进入「负载均衡」页面,选中你的负载均衡器
- 切换到「后端配置」标签,点击对应的后端服务
- 在后端服务详情页找到「会话亲和性与超时」区域(部分版本界面标注为「连接超时」)
- 将空闲超时时间调整为大于心跳间隔的数值(比如300秒/5分钟)——GCP HTTP(S)负载均衡默认空闲超时为60秒,与你遇到的断开时间完全匹配,这大概率是问题根因
确认负载均衡器协议配置
- 确保负载均衡器按HTTP/1.1配置(WebSocket依赖HTTP/1.1完成握手)
- 若使用HTTPS,检查SSL证书配置是否正常,保证握手过程无中断
排查防火墙规则
- 确认GCP防火墙允许WebSocket使用的端口(默认80/443,自定义端口需单独放行)
- 检查是否存在防火墙规则会在一段时间后主动切断长连接
服务器端添加日志验证
- 在Node.js服务器上补充连接日志,确认断开是负载均衡器主动发起,而非服务器或客户端问题
- 示例代码:
const wss = new WebSocket.Server({ port: 8080 }); wss.on('connection', (ws) => { console.log('新连接建立'); ws.on('close', (code, reason) => { console.log(`连接断开: 错误码=${code}, 原因=${reason.toString()}`); }); });
内容的提问来源于stack exchange,提问作者cis
相关产品推荐
相关产品推荐

