使用 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 请求。
我在客户端和服务器上都使用 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 请求。