сбой socketio: веб-сокет закрыт до установления соединения в рабочей среде

#node.js #websocket #socket.io

#node.js #websocket #socket.io

Вопрос:

Я создал приложение узла для проекта типа 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>
 

Любая помощь, идеи, предложения приветствуются.

Ответ №1:

Разрешили ли вы входящие TCP-соединения через порт 3800 на вашем сервере? Похоже, что брандмауэр блокирует соединения.

Комментарии:

1. должно ли оно быть как входящим, так и исходящим или просто входящим?

2. Только входящие, после установления соединения обе стороны смогут отправлять и получать данные