【发布时间】:2012-11-01 19:24:33
【问题描述】:
我计划在 EC2 上设置一组运行 Socket.io 的 NodeJS 应用程序服务器,并且我想使用 Elastic Load Balancer 在它们之间分散负载。我知道 ELB 不支持开箱即用的 Websocket,但我可以使用here in Scenario 2 描述的设置。
不过,正如 the blog post 中所述,我注意到此设置不提供会话关联或源 IP 信息:
我们不能在这个设置中拥有 Session Affinity 或 X-Forward 标头 因为 ELB 不解析 HTTP 消息,所以不可能 匹配 cookie 以确保 Session Affinity 或 Inject 特殊 X-Forward 标头。
Socket.io 在这些情况下还能工作吗?或者有没有另一种方法在负载均衡器后面使用 SSL 设置一组 Socket.io 应用服务器?
编辑:Tim Caswell 已经谈论过这样做here。有没有解释如何设置的帖子?这里再次没有会话粘性,但事情似乎运行良好。
顺便说一句,websockets 真的需要粘性会话吗?信息是作为新的独立请求传播的,还是只有一个请求+连接所有信息都在传播?
【问题讨论】:
-
快速回答 - 不,如果后续请求将转到不同的服务器,socket.io 将无法工作,您需要找到一种方法在您的设置中实现“粘性”会话。
-
@Dmitry:你确定吗?如果您使用共享存储,我认为 socket.io 应该可以工作,例如RedisStore?
-
@LinusGThiel 如果没有粘性会话,它将无法工作,这里有更多细节:groups.google.com/d/topic/socket_io/d9a8c49uymc/discussion
-
谢谢,@Dmitry。我似乎意识到了这个问题。
-
如需源IP地址,see here。
标签: node.js amazon-web-services websocket socket.io