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
相关产品推荐
相关产品推荐

