如何使大型实时应用程序使用socket.io或lightstreamer并扩展水平

时间:2016-10-05 12:10:40

标签: node.js socket.io load-balancing

我对实时应用程序有一些疑问。 我现在正在制作一个实时应用程序。我使用了socket.io,mongodb和nodejs。这个应用程序在原型中运行良好,但当用户数量增加时会发生什么? 我希望横向扩展。

例如我有两台服务器(服务器A,服务器B)

客户端A连接服务器A

客户端B连接服务器B

客户端A如何发送客户端B的消息?我一直在混淆不同的服务器 我发现使用redis就可以了。 redis-server有可能足够吗?

因此,我应该使用什么技术(redis,lightstreamer,jabber,socket.io,nginx)?

1 个答案:

答案 0 :(得分:0)

您无法直接从A发送消息到B,因为它们未连接到同一服务器。

解决方法是启用两个节点服务器之间的通信。

你提到了redis,所以如果你走这条路,你就可以拥有一个中央redis服务器,它有两个列表(每个服务器都有)。当客户端A想要加入客户端B时,他向服务器A发送他的消息。服务器A将无法在其本地套接字中找到客户端B,并将推送重新发送消息。服务器B不久后将从redis收集他的待处理消息并将其发送给客户端B.

这是一个基本的实现,您可以根据自己的需要进行更改。例如,每个服务器可以有一个消息列表,但为什么不是每个用户的列表(以及具有此列表的服务器)

另外作为旁注,任何中央数据存储(如数据库服务器(mongo?MySQL?))都可以像redis一样工作。这一切都取决于你已经拥有的东西,你可以拥有什么以及你想要什么类型的持久性。