【问题标题】:HTTP 400 Error on AWS ElasticBeanstalk with ALB and Socket.IO带有 ALB 和 Socket.IO 的 AWS ElasticBeanstalk 上的 HTTP 400 错误
【发布时间】:2021-04-04 10:15:38
【问题描述】:

我有一个 Elastic Beanstalk 环境,在 Node.js 实例上设置了 Application Load Balancer (ALB),它同时提供 REST API 和 Socket.IO 连接。

当 EC2 实例的数量超过一个时,一些 Socket.IO 连接会失败并显示 HTTP 400。当只有一个实例时,同样的问题会得到解决。

我还尝试在 ALB 中启用粘性会话,并且还创建了一个 Redis 适配器,该适配器连接到我在 ElasticCache 中的 Redis 实例。

无法找出导致这些 HTTP 400 错误的原因。

Socket.IO 文档https://socket.io/docs/v2/using-multiple-nodes/

【问题讨论】:

    标签: amazon-web-services redis socket.io amazon-elastic-beanstalk aws-application-load-balancer


    【解决方案1】:

    经过两天的研究,我找到了解决方案。 使用传输“websocket”而不是“轮询”(默认)。

    服务器:

    const io = require('socket.io')(http, {
       cors: {
          origin: '*'
       },
       transports: ['websocket']
    })
    

    客户:

    import io from 'socket.io-client'
    socket = io('wss://your_url/', {
       transports: ['websocket']
    })
    

    【讨论】:

      【解决方案2】:

      最终不得不使用解决此问题的网络负载均衡器 (NLB)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        • 2016-07-10
        • 2017-05-26
        • 1970-01-01
        • 2017-09-13
        • 2017-10-15
        • 2023-03-23
        相关资源
        最近更新 更多