我刚开始理解并解决这个问题。
Node.js的Socket.io或Go的Gorilla websocket解决方案每个实例都有一个连接池。因此,在每个实例中,我都可以说"向客户端发送消息xxx"。
但是,当我尝试水平扩展(通过生成其他实例)时,每个实例都有自己的客户端连接池,因此尝试将消息发送到连接到另一个实例的特定客户端会失败。我认为这是因为当前实例无法访问该实例的连接/内存池。
我理解ECS会自动横向扩展docker容器,如果我要在ECS上启动WS服务器项目并让它将另一个实例扩展到服务,AWS是否会神奇地处理套接字服务器实例之间的谈话 - 或者我必须处理是什么?
答案 0 :(得分:0)
根据MDN
WebSockets是一项先进技术,可以在用户的浏览器和服务器之间打开交互式通信会话。
这意味着每个websocket都是与特定服务器的持久连接。为了将事件发送到不同服务器中的套接字,您需要一个适配器。例如,如果您使用的是Socket.io,则可以查看SocketIO Redis。
另一方面,为了平衡负载,您可以使用支持ECS中的websockets和容器化应用程序的应用程序负载均衡器(ALB)。