节点:缩放socket.io / nowjs – 在不同实例之间进行缩放

在开始编写我的应用程序之前,我需要知道当一个node.js实例(express和(socket.io或nowjs))不够用时该怎么做。

您现在可能会告诉我,我不应该关心扩展,但是我不想开发一个应用程序并且遇到麻烦,因为您无法轻松缩放多个实例中的socket.io或nowjs。

我最近读到socket.io现在支持使用Redis进行扩展(我也没有经验)。 Nowjs是build立在socket.io之上的 – 是否以同样的方式工作? 在nowjs.org上,你可以看到“NowJS的分布式版本”正在开发中,而且要花钱。

如果您需要扩展节点,人们通常首先将一个负载均衡器放在多个节点实例的前面。 今天的标准是nginx,不过我想看看最近出来的节点平衡器的“弹性”。 下面是一个使用nginx反向代理来pipe理多个节点实例的例子:

Node.js + Nginx – 现在什么?

你提到的第二件事是socket.io/nowjs。 根据您使用这些框架的方式,您可能会遇到想要在多个node.js实例的客户端之间共享上下文的情况。 如果是这种情况,我build议使用持久性存储(如redis)来弥补节点实例之间的差距。 这是一个例子:

如何在socket.io中重用redis连接?

希望这是足够的信息和阅读让你开始,让我知道如果你有任何问题。

快乐的编码!

另一个有用的链接'缩放Socket.IO'https: //github.com/dshaw/talks/tree/master/2011-10-jsclub (幻灯片和示例应用程序)

就像在讨论中使用nginx作为socket.io反向代理的一个旁注一样,至less我了解它的方式,稳定版本的nginx 1.0.x不支持代理http / 1.1连接(这是为了使socket.io与websockets一起工作)。 有一个解决方法在这里描述: http : //www.letseehere.com/reverse-proxy-web-sockets使其工作,或使用这样的事情: https : //github.com/nodejitsu/node-http-代理,而nodejitsu的家伙说这应该支持它。