使用 socket.io 时 Websocket 连接失败

Websocket connection failed when using socket.io

我在客户端和服务器上都使用 socket.io,应用程序由 AWS 提供服务。我收到浏览器控制台错误:

websocket.js:54 WebSocket connection to 'wss://www.tidee.com/socket.io/?EIO=4&transport=websocket' failed: doOpen @ websocket.js:54 open @ transport.js:44 open @ socket.js:159

客户代码:

socket = io('https://www.tidee.com', {
    transports: ['websocket', 'polling'],
  });
socket.on('reconnect_attempt', () => {
  socket.io.opts.transports = ['polling', 'websocket'];
});

服务器代码:

const socketIo = require('socket.io');
...
const socketIoServer = https.createServer(app);
const io = socketIo(socketIoServer, {
    transports: ['websocket', 'polling'],
});

在 AWS 中,安全组接受端口 443,负载均衡器在 443 上侦听。

应用程序在 运行 本地(状态 101)时工作并且它使用 ws:// 协议。

如果使用 Elastic Beanstalk (EB) 部署您的应用程序。有一个 Nginx 代理服务器(在 EB 配置中)被部署为将请求代理到您的负载均衡器。删除 Nginx 代理服务器,websockets 将工作。如果你想保留 Nginx 代理,那么你将需要配置它来传递 websocket 请求。