我正在构建一个实时数据系统,允许Apache / PHP服务器将数据发送到我的Node.js服务器,然后该服务器会立即通过socket.io将该数据发送到关联的客户端。因此,Apache / PHP服务器发出包含数据的请求,以及告诉Node.js哪个用户将数据发送到的用户令牌。
现在这个工作正常 - 我有一个关联数组,它将用户的socket.io连接与他们的用户令牌联系起来。问题是我需要开始将其扩展到多个服务器。当然,使用socket.io的默认配置,我无法在节点工作者之间共享连接。
我想到的解决方案是使用RedisStore功能,让我的每个工作人员都看着同一个Redis商店。我一直在做研究,有很多关于如何使用pub / sub功能向大组(房间)广播消息的文档。这很好,但我需要能够将消息发送到单个客户端,所以我需要一些方法从RedisStore检索用户的socket.io连接。
我现在能想到的唯一方法就是创建一大堆以用户令牌命名的“房间”,每个房间只有一个用户。然后我可以放到那个房间。但是,这似乎效率很低。
有没有更好的方法可以从Redis检索用户唯一的socket.io连接?
答案 0 :(得分:0)
一旦与运行节点服务器的服务器建立套接字连接,它就会连接到该实例。
所以看起来你需要让你的php服务器知道客户端连接到哪个节点服务器。
在您的redis商店中,您只需将客户端ID的值存储为服务器的ID即可。然后php查找要使用的节点服务器并发出请求。