微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 ALB 和 Socket.IO 的 AWS ElasticBeanstalk 上的 HTTP 400 错误

如何解决带有 ALB 和 Socket.IO 的 AWS ElasticBeanstalk 上的 HTTP 400 错误

我有一个 Elastic Beanstalk 环境,在 Node.js 实例上设置了应用程序负载均衡器 (ALB),它同时为 REST API 和 Socket.IO 连接提供服务。

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

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

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

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

解决方法

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

服务器:

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

客户:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?