WebSocket发送消息后服务端没收到,是什么原因?
在做聊天功能时用了socket.io,客户端用socket.emit('chat', message)发送消息后,服务端监听不到。服务端明明显示连接正常,但就是收不到消息,卡在这好几天了……
尝试过在客户端加日志发现emit确实触发了,服务端用wireshark抓包也没看到数据。检查过端口是通的,握手阶段也没报错。这是哪里配置错了?
客户端代码片段:
const socket = io('http://localhost:3000');
document.querySelector('button').addEventListener('click', () => {
socket.emit('chat', { text: 'test message' }); // 这里有日志输出
});
服务端只监听了连接事件,还没写消息处理逻辑,但按理说连接阶段应该正常才对啊……
chat事件的代码,当然收不到。连接正常只是说明 WebSocket 握手成功了,但 emit 的chat消息需要对应监听。客户端代码放这了:
服务端得配上对应的 on 监听,不然消息发了就丢,socket.io 不会帮你自动打印出来。
服务端加上这段:
还有,你用 wireshark 抓不到是因为 socket.io 是走的 WebSocket 数据帧,不是原始 TCP 包,建议用浏览器开发者工具的 Network -> WS 面板里看消息记录,更直接。
先加监听逻辑,不然客户端发破天都没用。