我在 socket.io 中加入房间时似乎遇到问题。socket.join() 似乎什么也没做。这是我的服务器端代码io.on('connection', function (socket) {console.log('connected');socket.on('joinRoom', function (data) { console.log("Joining room") socket.join("room1",function(){ console.log("Joined room") }) socket.to('room1').emit('roomJoined', 'SERVER',' has connected to this room');});socket.on('acknowledge', function (data) { console.log(socket.room)});socket.on('disconnect', () => { console.log("disconnected") });});我可以确认“joinRoom”事件已被触发,因为我可以在控制台中看到“加入房间”,但未打印“加入房间”。此外,在客户端,“roomJoined”事件不会被触发。如果我改变socket.to('room1').emit('roomJoined', 'SERVER',' has connected to this room'); 到socket.emit('roomJoined', 'SERVER',' has connected to this room');然后客户端触发 roomJoined 事件,证明套接字没有加入房间。提前致谢
2 回答

jeck猫
TA贡献1909条经验 获得超7个赞
既然您已经找到了工作解决方案,我将解释原因......
正如评论中所述,在 Socket.IO 3.0 中,该socket.join
方法是同步的,并且不接受回调。至于为什么您的客户端没有收到“joinedRoom”事件......
好吧,在 Socket.IO 的所有版本中,socket.to
并且socket.in
不会向您正在调用的套接字发送任何内容(socket.to
或socket.in
)。

潇湘沐
TA贡献1816条经验 获得超6个赞
Nvm 我发现使用 socket.to() 而不是 io.to() 的错误。改变
socket.to('room1').emit('roomJoined', 'SERVER',' has connected to this room');
到
io.to('room1').emit('roomJoined', 'SERVER',' has connected to this room');
为我工作。
添加回答
举报
0/150
提交
取消