列出聊天室中的用户

时间:2014-06-05 11:42:06

标签: node.js sockets socket.io nodes nodejitsu

这是一个重复的问题,但我想要求它进一步澄清 我想使用socket.io创建一个私人聊天。谷歌搜索时,我找到了两个解决方案:

  1. 使用数组存储活动用户列表
  2. 使用房间概念
  3. 假设我的应用有数百万活跃用户 这就是我想要的:我在mysql db中有我的朋友列表,当我登录时,我想要所有朋友及其状态(有效与否)。

    案例1.如果我使用数组来存储所有活跃用户,那么它运行得很好,但这是一种存储连接到我的应用程序的所有用户的好方法吗?

    案例2.如果我使用房间概念,每个用户朋友都有一个独特的房间, 然后每当用户登录时,他必须加入所有那些房间。它也适用于我,但在这种情况下,我怎么知道我的朋友是否活跃?

    我想知道哪个解决方案适用于我的应用程序,该应用程序将拥有数百万用户,或者还有其他方法可以解决此问题。

1 个答案:

答案 0 :(得分:2)

我会使用第三种解决方案:

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

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

使用socket.IO 1.0,列出连接到房间的套接字最干净的解决方案并不是很清楚:

目前这是一个变通办法功能:

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

请注意,它可能不适用于所有适配器,因此它最多只是一种解决方法。