我正在构建一个实时数据系统,它允许 Apache/PHP 服务器将数据发送到我的 Node.js 服务器,然后它会立即通过 socket.io 将该数据发送到关联的客户端。因此 Apache/PHP 服务器发出一个包含数据的请求,以及一个告诉 Node.js 将数据发送给哪个用户的用户令牌。
现在这工作正常 - 我有一个关联数组,将用户的 socket.io 连接与他们的用户令牌联系起来。问题是我需要开始将其扩展到多台服务器。自然,使用 socket.io 的默认配置,我无法在节点工作人员之间共享连接。
我想到的解决方案是使用 RedisStore 功能,让我的每个员工查看同一个 Redis 存储。我一直在做研究,并且有很多关于如何使用发布/订阅功能向大型群组(房间)广播消息的文档。这很好,但我需要能够向单个客户端发送消息,所以我需要一些方法来从 RedisStore 检索用户的 socket.io 连接。
我现在能想到的唯一方法是创建大量以用户令牌命名的“房间”,并且每个房间只有一个用户。然后我就可以发射到那个房间。但是,这似乎非常低效。
有没有更好的方法可以从 Redis 检索用户唯一的 socket.io 连接?