SocketIO: WebSocket закрывается до установления соединения

Я использую 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=Test%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

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

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


person nupur kamble    schedule 30.08.2018    source источник