SocketIO: WebSocket закрывается до установления соединения - PullRequest
0 голосов
/ 30 августа 2018

Я использую Angular 4, Express 4.16.3 и Socket.IO 2.1.1 , чтобы создать движок чата для панели администратора поддержки , где Команда поддержки, использующая панель администратора, может общаться с клиентами на веб-сайте, для которого я использую один сервер на стороне панели администратора и 2 клиента , где один клиент снова находится на панели администратора для группы поддержки и Другое на стороне сайта для клиентов.

У меня есть два субдомена (один для панели и один для веб-сайта), и я обращаюсь к этому ответу , так как мне нужно решение для междоменного соединения в socket.io
Сервер находится на adminpanel.azurewebsites.net
Мои два клиента развернуты на обоих поддоменах:
Клиент веб-сайта на website.azurewebsites.net и
Панель (поддержка) клиента на adminpanel.azurewebsites.net
Я также включил CORS на adminpanel.azurewebsites.net (заголовок Access-Control-Allow-Origin установлен на *) и включил веб-сокеты на портале Azure. Оба моих приложения https.

Серверная часть (панель администратора) выглядит следующим образом :

port = process.env.PORT || 1337;
var server = require('http').Server(app);
var io = require('socket.io')(server ,{
  transports: ['websocket']
});

io.on('connection', function(socket) {
   socket.emit('socket connected')
//every time a new customer added on website end, new room is created
   socket.on('new customer added', function(username) {
      socket.broadcast.emit('new room', username)
    })
});
server.listen(port);

Клиентская часть (панель администратора) выглядит следующим образом :

this.socketUrl = 'adminpanel.azurewebsites.net'
this.sockets['main'] = io.connect(this.socketUrl, {
      transports: ['websocket']
    });

this.sockets['main'].on('new room', (room) => {
  this.sockets[room] = io.connect(this.socketUrl+'?token=' + room, {
    transports: ['websocket']
  });
});

На стороне клиента панели создается комната для каждого нового клиента.

Клиентская сторона (веб-сайт) выглядит следующим образом :

this.socket = io.connect('adminpanel.azurewebsites.net?token=' + this.username, {
      transports: ['websocket']
    });
this.socket.emit('new customer added', this.username);

Теперь проблема в том, что это прекрасно работает на локальном хосте, но на производстве, предупреждение

Соединение WebSocket с 'wss: //adminpanel.azurewebsites.net/socket.io/? Token = Test% 20Name & EIO = 3 & transport = websocket' не удалось: WebSocket закрывается до установления соединения.

отображается как на стороне панели администратора, так и на стороне сайта, после чего чат перестает работать.

Это предупреждение появляется несколько раз, затем отображается следующая ошибка:

enter code here Соединение WebSocket с 'wss: //adminpanel.azurewebsites.net/socket.io/? Token = Проверка% 20Name & EIO = 3 & transport = websocket' завершилась неудачно: истекло время ожидания открытия WebSocket

После отладки вот что я получил:

engine.io-client:socket socket error {"type":"TransportError","description":{"isTrusted":true}} +4ms
socket.io-client:manager connect_error +8ms
socket.io-client:manager cleanup +4ms
socket.io-client:manager reconnect attempt error +5ms
socket.io-client:manager will wait 2154ms before reconnect attempt +3ms
engine.io-client:socket socket close with reason: "transport error" +19ms
engine.io-client:socket socket closing - telling transport to close +3ms
socket.io-client:manager attempting reconnect +2s
socket.io-client:manager readyState closed +2ms
socket.io-client:manager opening https://adminpanel.azurewebsites.net?token=Test Name +3ms
engine.io-client:socket creating transport "websocket" +2s
engine.io-client:socket setting transport websocket +3ms
socket.io-client:manager connect attempt will timeout after 20000 +10ms
socket.io-client:manager connect attempt timed out after 20000 +20s
engine.io-client:socket socket close with reason: "forced close" +20s

Так что приложения некоторое время работают нормально, но появляется это предупреждение, и приложение перестает работать.

Я не могу понять, что является причиной этой ошибки и как я могу остановить ее возникновение. Есть ли способ обойти эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...