【问题标题】:Get list of clients in a socket.io room (2.0)获取 socket.io 房间中的客户端列表 (2.0)
【发布时间】:2017-10-02 19:14:17
【问题描述】:

使用 Socket.io 2.0 时如何获取房间中所有客户端的列表?

有很多相关的问题,但没有一个是针对 2.0 版或回答这个问题的。最接近的答案是 2.0,但仅说明了如何在使用 Redis 时获取客户端列表,这不是使用 socket.io 的要求。

【问题讨论】:

  • @LW001 - 不是。那是从 2014 年开始,大约是 2.0 之前的版本。接受的答案在 v2.0 中不起作用。接受的答案是io.sockets.adapter.rooms,它只返回带有用户计数的房间对象列表,而不是特定的用户列表(即socket.io 生成的套接字ID)。
  • @DonP,那么正常的做法是在较新版本的软件下使用解决方案发布另一个问题的答案。事实上,这个问题是您问题的超集,因为您的问题只询问 2.0,而不是 all 版本,就像另一个问题一样。接受的答案不适用于较新版本的事实值得评论,因此其他人知道,但不能证明提出相同问题的新问题是合理的。答案被接受的事实仅表明它在被接受时对 OP 有效。

标签: socket.io


【解决方案1】:

找到了,答案隐藏在 Socket.io 的“命名空间”下的文档中,而不是“房间”下。

例如,如果您在命名空间“/chat”中,并且希望房间中的所有客户端都为“general”,您可以这样做:

io.of('/chat').in('general').clients((error, clients) => {
  if (error) throw error;

  // Returns an array of client IDs like ["Anw2LatarvGVVXEIAAAD"]
  console.log(clients); 
});

【讨论】:

  • 如果你使用默认命名空间/,你会怎么做?
  • 我想通了。如果其他人想知道以下作品...io.of('/').in(room).clients((err, data)=> ...
  • 你不需要.of('/') - 它会假设它
  • 如何使用 async 和 await ?
【解决方案2】:

https://socket.io/docs/server-api/#namespace-clients-callback

io.of('/').in('room name').clients((error, clients) => {
  if (error) throw error;
  console.log(clients); // => [Anw2LatarvGVVXEIAAAD]
});

这是默认命名空间。我的意思是没有命名空间。

【讨论】:

  • 如何使用 async 和 await ?
猜你喜欢
  • 2018-01-09
  • 2014-07-14
  • 2015-10-06
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 2013-08-08
相关资源
最近更新 更多