套接字IO广播到房间不工作

时间:2014-03-21 04:29:22

标签: node.js websocket socket.io

这真的让我感到困惑,我试图使用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

2 个答案:

答案 0 :(得分:0)

你应该尝试删除io.sockets.manager.rooms [''];

默认情况下,所有用户都可以连接到这个''室。

删除此会议室将允许用户连接到用户创建的会议室。

答案 1 :(得分:0)

所以我解决了这个问题,不知怎的,一个空间发现它已经到了我的房间名称的末尾,所以没有实际发送数据包,因为它无法在哈希中找到房间。为了防止他人遭受同样的命运,请确保房间名称匹配!