首页 > 解决方案 > socketio 失败:在生产环境建立连接之前关闭 WebSocket

问题描述

我为 websocket 类型的项目创建了一个节点应用程序。我的本地机器没有问题,一切正常,例如连接、发送和接收,但是当上传到服务器时,客户端根本没有连接,它返回

WebSocket 在连接建立之前关闭。

下面是我的服务器代码

require('dotenv').config();

const path = require('path');
const fs =    require('fs');
const options = {
    key:    fs.readFileSync(path.join(__dirname,'../'+process.env.SSL_KEY)),
    cert:   fs.readFileSync(path.join(__dirname,'../'+process.env.SSL_CRT)),
    ca:     process.env.SSL_CA
};

const http = require('https').createServer(options);
const io = require('socket.io')(http,{
    cors : {
        origin : '*'
    }
});


// middleware
io.use((socket, next) => {
    let token = socket.handshake.query.token;
    if( token == process.env.TOKEN ){
        return next();
    }

    return next(new Error('authentication error'));
});


http.listen(3800, () => {
  console.log('listening on *:3700');
});

下面是客户端

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.4/socket.io.js" integrity="sha512-aMGMvNYu8Ue4G+fHa359jcPb1u+ytAF+P2SCb+PxrjCdO3n3ZTxJ30zuH39rimUggmTwmh2u7wvQsDTHESnmfQ==" crossorigin="anonymous"></script>

<script>
    var socket = io('mydomain.com:3800?token=myapp2021',{
        transports : ['websocket'],
        secure : true
    });

    socket.on('connect', function() {
        console.log( socket.connected );
    });
</script>

非常感谢任何帮助、想法、建议。

标签: node.jswebsocketsocket.io

解决方案


您是否允许服务器上端口 3800 的传入 TCP 连接?好像防火墙阻止了连接。


推荐阅读