我有一个node.js聊天的应用程序,其中多个客户连接到一个共同的聊天室使用socketio.我想要扩大这个多节点的进程,可能在不同的机器。然而,客户连接到同一个房间不会保证要打同一个节点的过程。例如户1命中的节点处理和2的用户将撞击过程中的节点B。他们是在相同的房间,所以如果用户1发送消息,2的用户应该得到它。什么是最好的方式来做到这一点,因为他们连接的管理是由不同的过程?

我想只是有点流程连接节点.这至少解决了问题这一进程一会 知道吗 还有另一个用户,用户为2,在的房间,但它仍然不能 发送 到2,因为用户的过程B控制该连接。有没有办法注册的"价值更改"回调穿红衣?

我在一个服务器环境中的地方,我不能控制的任何路线或负载平衡。

有帮助吗?

解决方案

两个Node.js过程都可以通过REDIS订阅某些频道 Pub/sub 并收听您传递到此频道的消息。例如,当用户1连接到第一台计算机上的处理A时,您可以将有关此用户的Redis信息存储,以及处理机器管理的信息。然后,当将用户2连接到第二台计算机上的过程B时,将消息发送给用户1时,您可以将其发布到此频道上,并检查哪个计算机负责管理与用户1的通信并做出相应响应。

其他提示

我已经做了(没有)的一些研究这一点。下面我的调查结果:

像yojimbo87说你的第一个只使用缓存pub/子(很优化).

http://comments.gmane.org/gmane.comp.lang.javascript.nodejs/22348

蒂姆*卡斯韦尔写道:

这是我的经验的瓶颈是化和 de化的数据,而不是实际的通道。我很确定 你可以使用的命名管道,但我不知道什么API。msgpack 似乎是一个很好的格式的数据交换。有几个 图书馆在那里,实现msgpack或ipc框架的顶上 它。

但是当化/反成为你的瓶颈我会尝试利用 https://github.com/pgriess/node-msgpack.我还测试了这一点,因为我觉得你迟早有这样更好吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top