0

我正在构建一个实时数据系统,它允许 Apache/PHP 服务器将数据发送到我的 Node.js 服务器,然后它会立即通过 socket.io 将该数据发送到关联的客户端。因此 Apache/PHP 服务器发出一个包含数据的请求,以及一个告诉 Node.js 将数据发送给哪个用户的用户令牌。

现在这工作正常 - 我有一个关联数组,将用户的 socket.io 连接与他们的用户令牌联系起来。问题是我需要开始将其扩展到多台服务器。自然,使用 socket.io 的默认配置,我无法在节点工作人员之间共享连接。

我想到的解决方案是使用 RedisStore 功能,让我的每个员工查看同一个 Redis 存储。我一直在做研究,并且有很多关于如何使用发布/订阅功能向大型群组(房间)广播消息的文档。这很好,但我需要能够向单个客户端发送消息,所以我需要一些方法来从 RedisStore 检索用户的 socket.io 连接。

我现在能想到的唯一方法是创建大量以用户令牌命名的“房间”,并且每个房间只有一个用户。然后我就可以发射到那个房间。但是,这似乎非常低效。

有没有更好的方法可以从 Redis 检索用户唯一的 socket.io 连接?

4

1 回答 1

0

一旦与运行节点服务器的服务器建立套接字连接,它就会连接到该实例。

因此,您似乎需要为您的 php 服务器提供一种方法来了解客户端连接到哪个节点服务器。

在您的 redis 存储中,您可以将服务器的 id 存储为客户端 id 的值。然后 php 查找要使用的节点服务器并发出请求。

于 2015-12-26T08:55:16.793 回答