使用AWS Elastic Load Balancer后面的Primus.io(websockets)

我正在尝试设置Elastic Load Balancer来将请求路由到运行Primus.io的node.js服务器群集,并使用sockjs来管理实时通信。

我已经设置了负载均衡器来侦听以下配置:

  • HTTPS 8084 - > HTTPS 8084(在我的node.js服务器上使用的端口)
  • SSL 443 - > TCP 80
  • 我的理解是,通过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