在开始编写我的应用程序之前,我需要知道当单个node.js实例(express和(socket.io或nowjs))不再足够时该怎么做。
你现在可能告诉我,我不应该关心规模直到时间,但我不想开发应用程序并遇到麻烦,因为你不能轻易地在多个实例中扩展socket.io或nowjs
我最近读到socket.io现在支持使用Redis进行扩展的方法(我也没有经验)。 Nowjs是基于socket.io构建的 - 它的工作方式是否相同?在nowjs.org上,您可以看到“NowJS的分布式版本”正在开发中,并且需要花钱。
答案 0 :(得分:14)
如果您需要扩展节点,那么人们通常首先启动的是将负载均衡器放在多个节点实例的前面。今天的标准是nginx,虽然我想查看最近出现的节点平衡器'bouncy'。以下是使用nginx反向代理管理多个节点实例的人的示例:
你提到的第二件事是socket.io/nowjs。根据您使用这些框架的方式,您可能会遇到要在多个node.js实例之间共享客户端的情况。如果是这种情况,我建议使用持久性存储(如redis)来弥合节点实例之间的差距。这是一个例子:
How to reuse redis connection in socket.io?
希望这是足够的信息和阅读能让你入门,如果你有任何问题,请告诉我。
快乐的编码!
答案 1 :(得分:3)
“Scaling Socket.IO”https://github.com/dshaw/talks/tree/master/2011-10-jsclub的另一个有用链接(幻灯片和示例应用程序)
答案 2 :(得分: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的人说这应该支持它。