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

线上域名Node服务器WebSocket异常本地正常,CONNECTING状态send报错求助

线上WebSocket无法正常工作的排查与解决办法

核心问题分析

报错Failed to execute 'send' on 'WebSocket': Still in CONNECTING state说明在WebSocket连接还没完全建立好的时候,就调用了send方法。本地环境因为网络/服务器延迟低,连接建立快,所以没触发这个问题;线上环境延迟高或者配置有问题,导致连接未就绪就执行了发送逻辑。

具体解决步骤

1. 确保发送逻辑在连接就绪后执行

修改前端代码,必须在WebSocket的open事件触发后再发送消息,表单提交时也要先判断连接状态:

// 创建WebSocket实例
const ws = new WebSocket('wss://apppanel.fitnfurious.in/chatm/m/ws'); // 替换成你的实际WebSocket路径

// 监听连接成功事件
ws.addEventListener('open', () => {
  console.log('WebSocket连接已建立');
  // 这里可以发送初始化消息
});

// 表单提交事件处理
document.querySelector('form').addEventListener('submit', (e) => {
  e.preventDefault();
  // 先检查连接状态是否为OPEN
  if (ws.readyState === WebSocket.OPEN) {
    const message = '你的消息内容'; // 替换成实际表单数据
    ws.send(message);
  } else {
    alert('连接未就绪,请稍等再试');
    // 进阶处理:可以把消息缓存起来,等连接就绪后自动发送
  }
});

2. 检查线上服务器与反向代理配置

如果用了Nginx等反向代理,必须配置WebSocket转发规则,否则连接会被阻断:

location /chatm/m/ws { # 对应你的WebSocket路径
  proxy_pass http://localhost:你的Node服务端口;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
}

同时确认Node.js的WebSocket服务正常启动,线上服务器的安全组/防火墙没有拦截WebSocket请求(如果用了非80/443端口,需开放对应端口)。

3. 协议匹配:HTTPS环境必须用wss://

线上如果是HTTPS网站,前端WebSocket必须用wss://协议,否则浏览器会阻止混合内容请求,导致连接失败。可以动态匹配协议:

const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsUrl = `${protocol}//${window.location.host}/chatm/m/ws`;
const ws = new WebSocket(wsUrl);

4. 监听错误事件排查具体问题

添加错误和关闭事件监听,收集线上的具体错误信息,方便定位问题:

ws.addEventListener('error', (err) => {
  console.error('WebSocket错误详情:', err);
  // 可以把错误信息上报到日志系统
});

ws.addEventListener('close', (event) => {
  console.log('连接关闭,错误码:', event.code, '原因:', event.reason);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:50:29