SocketIO : WebSocket ditutup sebelum koneksi dibuat

Saya menggunakan sudut 4, Express 4.16.3 dan Socket.IO 2.1.1 untuk membuat mesin obrolan untuk Panel Admin Dukungan tempat tim dukungan menggunakan panel admin dapat mengobrol dengan pelanggan di situs web yang saya gunakan satu server di sisi panel admin dan 2 klien di mana satu klien lagi ada di panel admin untuk tim dukungan dan yang lainnya ada di sisi situs web untuk pelanggan.

Saya memiliki dua subdomain (satu untuk panel dan satu untuk situs web) dan mengacu pada jawaban ini karena saya memerlukan solusi untuk koneksi lintas domain di socket.io
Server ada di adminpanel.azurewebsites.net
Kedua saya klien disebarkan di subdomain :
Klien situs web di website.azurewebsites.net dan
Klien panel(dukungan) di adminpanel.azurewebsites.net
Dan saya juga telah mengaktifkan CORS di adminpanel.azurewebsites.net (header Access-Control-Allow-Origin disetel ke *) dan saya telah mengaktifkan soket web di portal Azure. Kedua aplikasi saya adalah https.

Sisi server (panel admin) terlihat seperti ini:

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);

Sisi Klien (panel admin) terlihat seperti ini :

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']
  });
});

Di sisi klien panel, sebuah ruangan dibuat untuk setiap pelanggan baru.

Sisi Klien (situs web) terlihat seperti ini :

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

Sekarang, masalahnya adalah, ini berfungsi dengan baik di localhost tetapi pada produksi, peringatannya

Koneksi WebSocket ke 'wss://adminpanel.azurewebsites.net/socket.io/?token=Test%20Name&EIO=3&transport=websocket' gagal: WebSocket ditutup sebelum koneksi dibuat.

muncul di sisi panel admin dan sisi situs web dan setelah itu obrolan berhenti berfungsi.

Peringatan ini muncul beberapa kali kemudian muncul error berikut :

enter code hereKoneksi WebSocket ke 'wss://adminpanel.azurewebsites.net/socket.io/?token=Test%20Name&EIO=3&transport=websocket' gagal: waktu jabat tangan pembukaan WebSocket habis

Setelah debugging, inilah yang saya dapatkan:

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

Jadi aplikasi berfungsi dengan baik untuk beberapa saat, namun peringatan ini muncul dan aplikasi berhenti bekerja.

Saya tidak dapat mengetahui apa yang menyebabkan kesalahan ini dan bagaimana cara menghentikannya agar tidak terjadi. Apakah ada jalan keluar dari masalah ini?


person nupur kamble    schedule 30.08.2018    source sumber