这真的让我很困惑,我试图使用 Node 和 socket.io 创建一个多房间聊天应用程序,但由于某种原因,Web 套接字事件不会为用户创建的房间触发。我有以下代码:
if (clientData.messageRoom == "Lobby") {
socket.broadcast.to('').emit('sendMessageResponse', data);
}
else {
console.log("broadcast room: " + clientData.messageRoom);
socket.broadcast.to(clientData.messageRoom).emit('sendMessageResponse', data);
}
console.log('user ' + name + ' send this : ' + clientData.messageBody + " to room: " + clientData.messageRoom);
我在服务器上有以下日志
List of all rooms:
{ '': [ 'WrCg6zlmUOJgXlcX0oW5', 'Ym4FCRTqRoGw5nbo0oW6' ],
'/SF': [ 'Ym4FCRTqRoGw5nbo0oW6', 'WrCg6zlmUOJgXlcX0oW5' ] }
broadcast room: SF
debug - broadcasting packet
user Davis send this : test to room: SF
broadcast room: SF
debug - broadcasting packet
user Bob send this : se to room: SF
debug - broadcasting packet
debug - websocket writing 5:::{"name":"sendMessageResponse","args":[{"message":"dfd","username":"Bob","roomName":"Lobby"}]}
user Bob send this : dfd to room: Lobby
您可以看到,当 Bob 向大厅发送消息“dfd”但不向用户创建的房间发送消息“dfd”时,会触发 Web 套接字事件。我正在获取所有房间的列表
console.log(io.sockets.manager.rooms);
显然,两个连接的客户端的 ID 都在房间大厅和 SF 中,因此应该为房间 SF 触发该事件,但事实并非如此!任何帮助将不胜感激!
编辑:我正在使用 socket.io 版本 0.9.16
最佳答案
您应该尝试删除 io.sockets.manager.rooms[''];
默认情况下,所有用户都会连接到这个“房间”。
删除此房间将允许用户连接到用户创建的房间。
关于node.js - 套接字 IO 广播到房间不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22550186/