【问题标题】:Socket IO broadcast to room not workingSocket IO 广播到房间不工作
【发布时间】:2014-03-21 04:29:21
【问题描述】:

这真的难倒我,我试图使用 node 和 socket.io 创建一个多房间聊天应用程序,但由于某种原因,网络套接字事件没有为用户创建的房间触发。我有以下代码:

        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 向 Lobby 发送消息“dfd”而不是向用户创建的房间发送消息时,会触发 Web 套接字事件。我正在使用

获取所有房间的列表
console.log(io.sockets.manager.rooms);

很明显,两个连接的客户端的 ID 都在房间 Lobby 和 SF 中,所以应该为房间 SF 触发事件,但事实并非如此!任何帮助将不胜感激!

编辑:我使用的是 socket.io 版本 0.9.16

【问题讨论】:

  • 根据日志你没有两个房间,你说的是SFLobby。它只是收到消息的 messageRoom 属性。由于没有Lobby,Emit 不起作用。
  • 请重新运行测试并发布结果。
  • { '': [ 'WrCg6zlmUOJgXlcX0oW5', 'Ym4FCRTqRoGw5nbo0oW6' ], '/SF': [ 'Ym4FCRTqRoGw5nbo0oW6', 'WrCg6zlmUOJgXlcX0oW5' ] } 是所有房间的列表,所以是的,我有 2 个房间房间,一个没有名字''和'/SF'的房间,我的问题是你可以看到我向那个房间广播,但是“websocket writing 5 ...”日志消息没有触发

标签: node.js websocket socket.io


【解决方案1】:

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

默认情况下,所有用户都连接到这个“房间”。

删除此房间将允许用户连接到用户创建的房间。

【讨论】:

  • OK 如果我不想删除房间怎么办?用户不能同时连接到默认房间和其他房间吗?
  • 刚刚尝试了您的建议。不工作。仍然具有与上述相同的行为
【解决方案2】:

所以我解决了这个问题,不知何故,一个空间发现它位于我房间名的末尾,因此实际上没有发送数据包,因为它在哈希中找不到房间。为了避免其他人遭受同样的命运,请确保房间名称匹配!

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 2017-08-28
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2021-08-15
    • 2019-10-27
    相关资源
    最近更新 更多