Node.js WebSocket连接正常但消息发送无响应问题排查求助
问题分析与解决
嘿,我一眼就发现问题所在啦!你把WebSocket的事件绑定对象搞混了😉
核心问题:事件绑定错了对象
你当前的代码把message和open事件绑定在了**WebSocket服务器实例(wsserver)**上,但实际上:
open和message这类事件是属于单个客户端连接对象的,不是服务器本身- 服务器实例只会触发
connection(新客户端连接)、close(服务器关闭)这类全局事件
修正后的服务器代码(index.js)
var ws = require("ws"); var wsserver = new ws.Server({ server: httpserver, port: 3030 }); wsserver.on("connection", function(connection) { console.log("新客户端连接成功"); // 监听单个连接的消息事件(这才是正确的位置!) connection.on("message", function(message) { console.log("收到客户端消息:", message.toString()); // 可选:给客户端回复消息 connection.send("服务器已收到你的消息:" + message.toString()); }); // 可选:监听单个连接的断开事件 connection.on("close", function() { console.log("客户端已断开连接"); }); });
客户端代码优化(可选)
你的客户端发送消息的逻辑没问题,但可以加一些监听来排查问题:
var wscon = new WebSocket("ws://192.168.20.88:3030"); wscon.onopen = function() { console.log("客户端连接成功"); wscon.send("test message"); }; // 监听服务器回复的消息 wscon.onmessage = function(event) { console.log("收到服务器回复:", event.data); }; // 监听连接错误 wscon.onerror = function(err) { console.error("连接出错:", err); };
关键知识点回顾
- WebSocket服务器(
ws.Server)只负责监听新连接,每次有客户端接入会生成一个专属的connection对象 - 所有和单个客户端的交互(收发消息、连接状态变化)都要通过这个
connection对象处理 - 服务器实例本身不会触发
message或open事件,别再绑错对象啦!
内容的提问来源于stack exchange,提问作者TheLovelySausage
相关产品推荐
相关产品推荐

