在ECS上负载平衡websockets?

时间:2018-05-02 03:23:41

标签: javascript amazon-web-services amazon-ecs

我刚开始理解并解决这个问题。

Node.js的Socket.io或Go的Gorilla websocket解决方案每个实例都有一个连接池。因此,在每个实例中,我都可以说"向客户端发送消息xxx"。

但是,当我尝试水平扩展(通过生成其他实例)时,每个实例都有自己的客户端连接池,因此尝试将消息发送到连接到另一个实例的特定客户端会失败。我认为这是因为当前实例无法访问该实例的连接/内存池。

我理解ECS会自动横向扩展docker容器,如果我要在ECS上启动WS服务器项目并让它将另一个实例扩展到服务,AWS是否会神奇地处理套接字服务器实例之间的谈话 - 或者我必须处理是什么?

1 个答案:

答案 0 :(得分:0)

根据MDN

  

WebSockets是一项先进技术,可以在用户的​​浏览器和服务器之间打开交互式通信会话。

这意味着每个websocket都是与特定服务器的持久连接。为了将事件发送到不同服务器中的套接字,您需要一个适配器。例如,如果您使用的是Socket.io,则可以查看SocketIO Redis

另一方面,为了平衡负载,您可以使用支持ECS中的websockets和容器化应用程序的应用程序负载均衡器(ALB)。