列出聊天室中的用户

这是一个重复的问题,虽然我想问一下它的更多的澄清。
我想创build一个使用socket.io的私人聊天。 当用Googlesearch时,我发现了两个解决scheme:

  1. 使用数组来存储活动的用户列表
  2. 使用房间的概念

假设我的应用程序有数百万活跃用户。
这是我想要的:我有我的朋友列表在MySQL数据库,当我login,我想所有的朋友和他们的地位(活跃与否)。

案例1.如果我使用数组来存储所有活动的用户,那么它工作得很好,但这是一个好方法来存储连接到我的应用程序在数组中的所有用户?

情况2.如果我使用每个用户朋友都有一个独特的roomid的房间概念,那么无论何时用户login,他必须join所有这些房间。 它也适用于我,但在这种情况下,我怎么知道我的朋友是否活跃?

我想知道哪个解决scheme可以为我的应用程序工作,这将有数百万用户,或者有任何其他方式来解决这个问题。

我会使用第三种解决scheme:

  • 将用户设置为每个套接字
  • 无论何时您需要列出房间中的用户,请查看房间中的客户端套接字列表

如果您使用的是socket.IO pre 1.0,那么您可以使用io.sockets.clients(roomName)来获取一个房间中的套接字。

使用socket.IO 1.0,不清楚列出连接到房间的套接字的最简洁的解决scheme是什么:

现在,这是一个解决方法function:

 function roomSockets(roomId) { var clients = io.sockets.adapter.rooms[roomId], sockets = []; for (var clientId in clients) sockets.push(io.sockets.connected[clientId]); return sockets; } 

请注意,它可能不适用于所有适配器,所以最好是解决方法。