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