Node.js WebSocket Server的message事件无法触发问题求助
排查WebSocket服务器端
on message事件不工作的问题 你的核心问题是对ws库的事件绑定逻辑理解有误,WebSocket.Server(即代码中的wss)本身不会触发message事件,客户端发送的消息是由单个连接的客户端实例触发的,也就是connection回调里的client对象。
修正后的server.js代码
const WebSocket = require("ws"); const PORT = 9999; let wss = new WebSocket.Server({ port: PORT }); wss.on("connection", (client) => { client.send(`[server] ${new Date()}: hello new client`); // 把message事件绑定到当前连接的client实例上 client.on("message", (message) => { // ws库中message回调的参数直接是消息内容,无需取data属性 console.log(`message from client: ${message}`); }); });
关键修正点说明
- 事件绑定对象错误:原代码把
message事件绑定在wss(WebSocket服务器实例)上,但该实例仅负责监听连接、关闭等服务器级事件,不会监听客户端消息。必须给每个成功连接的client实例单独绑定message事件。 - 消息参数处理错误:ws库中
client.on('message')的回调参数直接是客户端发送的原始消息内容(Buffer或字符串),不需要像浏览器WebSocket那样访问message.data。
测试验证
重启你的Node服务器,打开客户端页面点击PING按钮,此时服务器控制台就能正常打印客户端发来的消息了。
内容的提问来源于stack exchange,提问作者user19646723
相关产品推荐
相关产品推荐

