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

NodeJS WebSocket服务端发消息报错:readyState 0 (CONNECTING)

解决WebSocket错误:Error: WebSocket is not open: readyState 0 (CONNECTING)

问题原因

WebSocket连接是异步建立的,你在创建客户端实例后立刻调用send(),此时连接还处于**CONNECTING(readyState=0)**状态,握手尚未完成,因此无法发送消息导致报错。

解决方案

必须等待WebSocket客户端触发open事件(表示连接已成功建立)后,再调用send()方法。同时建议添加error监听,处理连接失败的异常情况。

修改后的代码

server.js(修正后)

const express = require('express');
const WebSocket = require('ws');
const wsClient = new WebSocket('ws://localhost:1998/');

// 连接成功后发送消息
wsClient.on('open', () => {
    console.log('已连接到目标WebSocket服务端');
    wsClient.send('Hialo');
});

// 监听连接错误,避免程序崩溃
wsClient.on('error', (err) => {
    console.error('连接失败:', err);
});

const app = express();

const server = app.listen(1989, () => {
    console.log('App is listening on 1989');
});

const wss = new WebSocket.Server({ server: server });

wss.on("connection", ws => {
    console.log("有新客户端连接到当前服务端!");
    ws.on('message', (message) => {
        console.log(`收到消息:${message}`);
    })
})

client.js(优化命名,功能不变)

const express = require('express');
const WebSocket = require('ws');

const app = express();

const server = app.listen(1998, () => {
    console.log('App is listening on 1998');
});

const wss = new WebSocket.Server({ server: server });

wss.on("connection", ws => {
    console.log("有新客户端接入!");
    ws.on('message', (message) => {
        console.log(`收到消息:${message}`);
    })
})

执行说明

  1. 先启动client.js(它作为WebSocket服务端,监听1998端口)
  2. 再启动server.js,此时客户端会成功连接并发送消息

WebSocket readyState状态说明

  • 0: CONNECTING - 正在建立连接
  • 1: OPEN - 连接已就绪,可正常收发消息
  • 2: CLOSING - 连接正在关闭
  • 3: CLOSED - 连接已关闭

内容的提问来源于stack exchange,提问作者Mustafa Koşmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:30:50