2016-05-01 94 views
1

我想使用socket.io,但我将运行我的应用的多个实例,所以这就是事情变得有趣的地方。Socket.io和Redis pub/sub

  • 我需要在不同的端口上运行多个实例。这里没问题。

  • 我决定不使用Node自己的集群,我将使用Nginx进行负载平衡(这就是为什么我创建应用程序的多个实例)。 Nginx支持websockets,所以这一个也被整理出来。

  • 考虑到将会有多个实例,并非所有实例都不能直接相互通信(用户A连接到实例X,如果用户B连接到实例Y,那么它们将无法与服务器通信是互相独立的),所以我需要使用Redis的pub/sub机制作为包装来模仿socketio的发射功能。这样,即使我有多个应用程序实例或在不同的服务器上运行它,只要连接到同一个Redis服务器,每个人都可以相互通话。为了达到这个目标,我需要使用socket.io-redis和socket.io-emitter模块。

我说得没错,这种方法有什么问题吗?

回答

1

关于正确的声音可能除了你确定你需要在不同的端口上有多个Node应用程序实例?因为你可能能够处理比使用一台服务器更多的负载,并且有办法通过socket.io分离出不同的通信通道。

+0

我想利用所有的CPU,似乎有两种方式来实现它,使用集群模块(本地解决方案)或创建多个实例(等于核心数),使用Redis的pub/sub进行套接字通信因为如果它们不在同一台服务器上,它们不能直接对话),并让Nginx处理这些实例之间的负载平衡。它也应该适用于运行多个实例的多个服务器。那是对的吗? – salep

+1

我认为你所说的会起作用,只是认为你可能想仔细检查一下,你是否真的受到CPU的限制。当然,如果只用一个进程就会遇到CPU/IO问题,那么拥有可扩展的解决方案当然很好,但这并不能保证你会遇到瓶颈。 –

+0

我很可能不会很快遇到这个瓶颈(可能永远不会),但我希望有一个可扩展的解决方案,可以利用尽可能多的资源。谢谢! – salep