【问题标题】:socket.io - io.sockets.adapter object?socket.io - io.sockets.adapter 对象?
【发布时间】:2017-08-01 23:34:37
【问题描述】:

我正在尝试使用 socket.io 并尝试构建一个多房间聊天应用程序。我遵循的指南使用 1.0.0 之前的 socket.io 已经过时。

我正在尝试在给定房间中查找已连接客户端的列表。谷歌搜索表明我必须使用适配器。但是,我无法在任何地方找到它的文档。我在 git-hub 文档中搜索了它,但搜索没有返回有关适配器的任何信息。 https://github.com/socketio/socket.io-client/blob/master/docs/API.md

有人能指出我正确的方向吗?我可以在哪里阅读有关适配器及其相关方法的更多信息?此外,如果您能提供最新的 socket.io 文档,我将不胜感激。谢谢。

【问题讨论】:

标签: node.js socket.io


【解决方案1】:

您可以像这样获取顶级命名空间中所有房间的地图:

io.nsps['/'].adapter.rooms

您可以像这样列出其中一个房间中的插座:

function getSocketsInRoom(room, namespace = '/') {
    let room = io.nsps[namespace].adapter.rooms[room];
    return room.sockets;
}

据我所知,这类东西根本没有记录在案。我只是通过检查事物在调试器中的存储方式才发现这样的事情。这可能会或可能不会意味着它在未来会发生变化 - 我真的不知道。

【讨论】:

    【解决方案2】:
      sockets:
       { '2v8OmIS4qTGX61-YAAAC': true, '3YnScxOgpmAGhZWsAAAG': true },
      length: 2 }
    

    它给你这个输出。因此,它基本上为您提供了 clientId 以及它是否已连接以及连接到特定房间的客户端总数。当执行下面的代码时(在服务器端用node.js编写)给你上面的输出。目前有两个客户端连接到同一个名为“hello”的房间。

    var clientsInRoom = io.sockets.adapter.rooms[room];
    

    但是当你在下面编写这段代码并在控制台记录它时

    var clientsInRoom = io.sockets.adapter.rooms
    

    当单个客户端连接时,它会在控制台记录这个

    { '9mVAHSDwcwnqsF4aAAAA':
       Room { sockets: { '9mVAHSDwcwnqsF4aAAAA': true }, length: 1 } }
    

    这个疯狂的 '9mVAHSDwcwnqsF4aAAAA' 字面量是每个客户端唯一的客户端 ID

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-11
      • 2017-03-08
      • 2015-09-30
      • 2013-10-26
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多