2011-11-01 32 views
11

在开始编写我的应用程序之前,我需要知道如果单个node.js实例(express和(socket.io或nowjs))不是足够了。节点:缩放socket.io/nowjs - 跨不同实例的缩放

你可能现在告诉我,我不应该关心缩放,直到时间到了,但是我不想开发一个应用程序并且遇到麻烦,因为你不能轻易地缩放socket.io或nowjs跨多个实例。

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

回答

14

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

Node.js + Nginx - What now?

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

How to reuse redis connection in socket.io?

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

快乐编码!

+0

谢谢,你知道如果你可以使用nowjs和redis? – Eliasdx

+0

当然,你可以 - 他们是两种完全不同的技术,具有不同的用途。 Nowjs将为您提供类似于socket.io的持续服务器 - 客户端连接功能。这对于服务器到客户端的消息传递,客户端广播等是非常有用的。典型的例子是建立一个聊天室。 Redis更多地用作后端数据存储 - 它可以执行诸如存储键 - 值对,pubsub等之类的事情。它作为单独的进程(甚至在单独的机器上)驻留在节点之外,这使得桥接多个服务器。 –

1

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