我正在寻找一个通过 sockets.io 创建实时套接字应用程序的系统,并且可以毫无问题地平衡。
有大量解决方案可以在多个套接字实例之间平衡负载,例如 SocketCluster,但我面临的问题是,当负载平衡器决定我需要 8 个实例而不是 10 个实例并关闭其中 2 个时,我该如何保留这些实例的套接字连接?
尝试更好地解释一下,我有一家活动流媒体公司,几乎每个周末都会播放活动流媒体,但中间不播放任何内容。如果我使用 Amazon EC2,那么在几乎没有用户连接的情况下,我只会有 1 个实例,但在周末,当活动开始流媒体时,Amazon 会启动一些实例,并将每个连接路由到不同的服务器。我看到的问题是,当活动结束并且人们开始退出时,负载平衡器将开始关闭实例,并且仍然连接到这些实例的人将开始失去与聊天的连接。我知道我可以通过重新连接人们来解决这个问题,但他们在重新连接时可能会丢失一些消息。
是否有一个系统可以将连接路由到另一台服务器,并且知道连接到另一个实例的是同一个用户,而无需重新连接?
答案1
您无法保持与已关闭的服务器进程的连接。套接字是两个特定端点之间的连接。出于安全原因,您不能只将其中一个端点重新映射到新服务器。相反,您必须拆除套接字并让它重新连接(socket.io 将自动为您执行此操作),然后在再次连接时重新平衡到新配置。