这真的让我感到困惑,我试图使用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发送消息时,您可以看到Web套接字事件被触发了#34; dfd"到大厅但不是用户创建的房间。我正在使用
获取所有房间的列表console.log(io.sockets.manager.rooms);
显然,两个连接的客户' ids在房间大厅和SF都有,所以这个活动应该在SF房间开除,但事实并非如此!任何帮助将不胜感激!
编辑:我使用的是socket.io版本0.9.16
答案 0 :(得分:0)
你应该尝试删除io.sockets.manager.rooms [''];
默认情况下,所有用户都可以连接到这个''室。
删除此会议室将允许用户连接到用户创建的会议室。
答案 1 :(得分:0)
所以我解决了这个问题,不知怎的,一个空间发现它已经到了我的房间名称的末尾,所以没有实际发送数据包,因为它无法在哈希中找到房间。为了防止他人遭受同样的命运,请确保房间名称匹配!