首页 > 解决方案 > websocket 连接到 'wss://url_from_aws_domain/socket.io/?EIO=4&transport=websocket' 失败?

问题描述

我已经在本地使用 socket.io( https://cdnjs.com/libraries/socket.io )实现了实时通知,它工作正常。但是当我尝试在部署在 AWS 域的实时服务器上实现它时,与服务器建立套接字连接的前端出现错误,websocket 无法连接服务器并抛出错误:

websocket 连接到 'wss://url_from_aws_server/socket.io/?EIO=4&transport=websocket' 失败?

前端(通知发送方)

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.min.js"></script>
<script>
var socket = io('https://app.url_from_aws_server.com:4492', { transports: ['websocket', 'polling', 'flashsocket'] });
$(document).on("click",'#confirmSlot',function(){

socket.emit("notify_platform", {
    "shop": locationName,
    "therapist": therapistName,
    "date": therapistDate,
    "time": therapistTime,
});
}
</script>

服务器端

const express = require('express');
const app = express();
...
const sslOptions = {
    key: fs.readFileSync(path.join(__dirname, '../ssl/key.pem')),
    cert: fs.readFileSync(path.join(__dirname, '../ssl/cert.pem')),
    requestCert: false,
    rejectUnauthorized: false,
};

const https = require('https').createServer(sslOptions, app);

const io = require('socket.io')(https, {
    cors: {
        origin: 'https://app.url_from_aws_server.com:4492',
        methods: ['GET', 'POST'],
    },
});
...
https.listen(process.env.SSL_PORT, () => {
    console.log(
        `HTTPS Server started at ${process.env.SSL_PORT}, Database - ${process.env.MONGODB_URI}`
    );
    io.on('connection', function(socket){
        console.log('Auth value:' + socket.id);
        socket.on('notify_platform', function(details){
            socket.broadcast.emit('notify_platform', details);
        })
    })
});

在此处输入图像描述

标签: node.jsamazon-web-servicessocketswebsocketsocket.io

解决方案


推荐阅读