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

NodeJS使用ws库搭建WebSocket服务无响应,request事件未触发问题

问题解答

核心问题原因

  • 代码API误用:ws库的WebSocket.Server不存在request事件,该事件是第三方websocket库的专属API,两个库用法不互通,所以你的事件绑定逻辑永远不会触发。
  • 请求类型错误:426 Upgrade Required状态码代表客户端需要升级请求协议为WebSocket,你用Postman发送的是普通HTTP请求,未携带WebSocket握手所需的Upgrade: websocket等请求头,请求在握手阶段就被服务端拒绝,不会进入后续事件回调。

修复实现方案

1. 服务端代码修正

使用ws库标准的connection事件监听逻辑,代码如下:

const WebSocket = require('ws');
const webSocketServer = new WebSocket.Server({ port: 4000 });

// 客户端握手成功后触发connection事件
webSocketServer.on('connection', (wsInstance, incomingRequest) => {
  console.log("test! 新客户端连接成功");
  // 监听客户端发送的消息
  wsInstance.on('message', (payload) => {
    const receiveMsg = payload.toString();
    console.log('收到客户端消息:', receiveMsg);
    // 向客户端推送消息
    wsInstance.send(`服务端响应:已收到消息 "${receiveMsg}"`);
  });
  // 监听连接断开事件
  wsInstance.on('close', () => {
    console.log('客户端连接已断开');
  });
});

console.log('WebSocket服务已启动,监听端口4000');

2. Postman请求操作修正

不要新建普通HTTP请求,选择Postman的WebSocket请求类型,地址填写ws://localhost:4000,点击「连接」即可触发服务端的事件回调,看到控制台输出对应日志。

内容的提问来源于stack exchange,提问作者F.johansson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:36:04