You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebSocket连接异常:部分连接自动断开返回1005错误码求助

解决WebSocket 1005错误连接断开问题

针对你遇到的单个WebSocket连接触发1005错误断开的情况,结合你的Nginx配置和服务端环境,给出以下解决步骤:

1. 调整Nginx长连接超时配置

你的Nginx配置中缺少WebSocket长连接的超时设置,默认proxy_read_timeout为60秒,若连接长时间无数据传输,Nginx会主动断开TCP连接,触发1005错误。在location /块中添加超时配置:

location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP 192.210.203.237;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    # 添加长连接超时配置,根据业务需求调整时长,示例为1天
    proxy_read_timeout 86400s;
    proxy_send_timeout 86400s;
}

修改后重启Nginx生效:nginx -s reload

2. 完善服务端WebSocket心跳机制

虽然你代码中有pingInterval,但需要确保心跳逻辑正确执行,避免因无数据传输触发Nginx断开。优化心跳代码:

// 30秒发送一次ping帧
const pingInterval = setInterval(() => {
  if (conn.readyState === WebSocket.OPEN) {
    conn.ping();
  } else {
    clearInterval(pingInterval);
  }
}, 30000);

// 监听pong响应,确认连接存活
conn.on('pong', () => {
  // 可记录日志或更新连接状态
});

conn.on('close', (e) => {
  logger.warn('trigger close event', e);
  closeConn(doc, conn);
  clearInterval(pingInterval);
});

心跳间隔建议短于Nginx的proxy_read_timeout,确保连接始终有数据交互。

3. 排查异常连接的客户端环境

仅单个连接出现问题,需排查该客户端的特殊情况:

  • 客户端网络是否存在不稳定、防火墙拦截TCP连接的情况
  • 客户端浏览器/SDK的WebSocket实现是否存在兼容性问题(比如旧版本浏览器的WebSocket限制)
  • 客户端是否有进程被意外终止的情况

4. 升级WebSocket库版本

你使用的ws@6.2.1版本较旧,存在一些已知的兼容性和稳定性问题。升级到最新稳定版(如ws@8.x),修复旧版本的bug:

npm install ws@latest

注意:升级后需检查API兼容性,ws@8.x部分方法和事件有调整,比如部分错误处理逻辑有变化。

内容的提问来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:34:51