使用AWS Elastic Load Balancer后面的Primus.io(websockets)
我正在尝试设置Elastic Load Balancer来将请求路由到运行Primus.io的node.js服务器群集,并使用sockjs来管理实时通信。
我已经设置了负载均衡器来侦听以下配置:
我的理解是,通过ELB获取websockets的唯一方法是通过SSL-> TCP,因此可以实现上述配置。
我已经正确启用了ELB的新代理协议,如下所述:
http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html
当试图从客户端连接到服务器时,HTTPS请求最初被发送,然后从我可以收集的信息中将其升级到websockets。 但是当我将它发送到负载均衡器地址时,请求只是失败。
如果我将初始Primus连接请求发送到单个nodejs服务器的ip,如下所示:
var primus = new Primus('https://ip.address.of.single.server:8084');
该请求被正确返回并正确升级到websockets。
当我将IP地址切换到平衡器的IP地址时,它会失败,并且对node.js服务器的初始https请求不返回任何内容。 我认为这意味着websocket转移无法建立,但说实话我在这方面没有经验,所以可能是完全错误的。
有谁知道我做错了什么?
提前致谢
你有没有聚集你的NodeJS实例? 例如,如果您使用SocketIO,则应使用群集会话存储。 实际上,我目前也正在调查在Vertx顶端运行的SockJS。
后面的问题是Amazon ELB不会尊重过去的任何转发(与HTTP之上的粘滞会话相反),这意味着通过TCP级别的连接可以在任何群集节点转发。 是的,一个TCP通道可以。 但是像SocketIO这样的框架为支持会话(在WebSockets中不存在)和多个传输层(http,轮询,套接字等)做了更多的工作。
链接地址: http://www.djcxy.com/p/87157.html上一篇: Using Primus.io (websockets) behind AWS Elastic Load Balancer
下一篇: Socket.io Websockets on a TCP configured Amazon Elastic Load Balancer