#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. Только входящие, после установления соединения обе стороны смогут отправлять и получать данные