1

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

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

假设我的应用拥有数百万活跃用户。
这就是我想要的:我在 mysql 数据库中有我的朋友列表,当我登录时,我想要所有朋友及其状态(活跃与否)。

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

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

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

4

1 回答 1

2

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

  • 将用户设置到每个套接字
  • 随时查看房间中的客户端套接字列表,以列出房间中的用户

如果您使用的是 1.0 之前的 socket.IO 那么您可以使用它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;
}

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

于 2014-06-05T11:47:37.477 回答