node.js - 套接字 IO 广播到房间不起作用

标签 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 向大厅发送消息“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/

相关文章:

node.js - 当我的对象即将被 Node 中的 GC 收集时,我可以得到回调吗?

angular - 有没有办法在 websocket 连接中捕获关闭事件?

javascript - Node.js Socket.io 页面刷新多个连接

javascript - io.sockets.in(房间名称).on(我的事件)加入后不起作用

javascript - 将 MQTT NPM 模块导入 NativeScript

node.js - graphql prisma nodejs postgresql 如何将创建日期/更新字段添加到 graphql 类型?

javascript - 在 NodeJS 中, 'Decimal' 也用作 'decimal'

Node.js 作为网关

javascript - Ratchet Websocket 传递一个用户 ID

node.js - Connect/node.js - 创建一个简单的服务器