【问题标题】:(number of) clients connected to a room in socket.io(数量)客户端连接到 socket.io 中的一个房间
【发布时间】:2015-01-05 23:26:21
【问题描述】:

我一直在努力寻找一种有效的方法来获取连接到 socket.io 房间的客户端数量。 有人建议我研究这个线程: How to get room's clients list in socket.io 1.0 但是,除了检查每个连接的套接字及其房间以显示单个房间的客户的解决方案之外,目前没有任何解决方案在此线程中起作用。

因此,我需要再问一次:在 socket.io 中获取房间中(数量)客户端的(当前)最有效的方法是什么?

【问题讨论】:

  • 当有新用户连接时,您不能记数吗?并在某些用户断开连接时适当处理。有效,有什么问题吗?
  • @aravind 我当然可以通过多种方式手动处理此问题,但我很想了解(当前)处理此问题的最佳方式。由于 socket.io 在任何地方都没有完整且最新的文档/api,因此最好在这里询问。
  • Zettam:我很久以前就用过socket了,我只用了基本的api。 :) 我也想知道一个好方法!
  • 我建议制作一个简单的应用程序,向聊天室中的每个人发送一条消息,然后在调试器中单步执行该代码,您将很快看到 socket.io 如何跟踪谁在给定的聊天室中(因为它必须知道每个房间里都有谁才能发送给他们所有人)。这可能是某处的一系列连接。

标签: javascript node.js socket.io


【解决方案1】:

io.nsps[yourNamespace].adapter.rooms[roomName] // default namespace is '/'

如果没有客户端,则返回布尔值或undefined 的客户端对象。在大多数情况下,您可以使用

获取此对象的长度

Object.keys(io.nsps[yourNamespace].adapter.rooms[roomName]).length

但它只有在至少有一个客户端连接时才有效,因为返回的是未定义的。

如果您没有使用任何特定的命名空间,则可以使用 io.sockets.adapter.rooms[roomName]

默认情况下,当客户端断开连接时,它会离开房间,那么这种方式对我有用。

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 2018-04-06
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多