用 WebSocket 实现广播消息时,所有客户端都能收到吗?

打工人淑然 阅读 12

我用 WebSocket 搭了个简单的聊天室,想实现一条消息发出去,所有在线用户都能看到。但目前只有自己能收到,其他人收不到,是我服务端没写对还是前端连接有问题?

前端是用 React 写的,连接逻辑大概是这样:

useEffect(() => {
  const ws = new WebSocket('ws://localhost:8080');
  ws.onmessage = (e) => {
    const msg = JSON.parse(e.data);
    setMessages(prev => [...prev, msg]);
  };
  // 发送消息
  sendMessage = (text) => ws.send(JSON.stringify({ text }));
}, []);

服务端是 Node.js + ws 库,但不确定是不是广播逻辑没处理好……

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
Newb.瑞玲
服务端肯定得改一下,你现在的写法只发给了连接的那个客户端。直接用这个:

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

wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);

// 广播消息给所有客户端
wss.clients.forEach(function each(client) {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
});


记得处理下断开连接的情况,不然会内存泄漏。前端代码看起来没问题,确保发送的消息格式和服务端解析的一致。
点赞
2026-03-22 13:06