SocketIO : WebSocket 在建立连接之前关闭

nup*_*ble 8 sockets websocket node.js socket.io

我正在使用 angular 4、Express 4.16.3Socket.IO 2.1.1支持管理面板创建聊天引擎,使用管理面板的支持团队可以在我使用一台服务器的网站上与客户聊天在管理面板一侧和2 个客户端,其中一个客户端再次位于支持团队的管理面板上,另一个位于客户的网站侧。

我有两个子域(一个用于面板和一个用于网站),并参照这个答案,因为我需要在socket.io跨域连接解决方案
服务器上adminpanel.azurewebsites.net
我的两个客户端部署在两个子域:
网站客户端website.azurewebsites.net上 ,并
在adminpanel.azurewebsites.net面板(支持)的客户
,我也已经启用了CORS上adminpanel.azurewebsites.net(访问控制允许来源标题设置为*)和我在 azure 门户上启用了 websockets。我的两个应用程序都是 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);
Run Code Online (Sandbox Code Playgroud)

客户端(管理面板)如下所示

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']
  });
});
Run Code Online (Sandbox Code Playgroud)

在面板客户端,为每个新客户创建一个房间。

客户端(网站)看起来像这样

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

现在,问题是,这在本地主机上完美运行,但在生产中,警告

与“wss://adminpanel.azurewebsites.net/socket.io/?token=Test%20Name&EIO=3&transport=websocket”的 WebSocket 连接失败:在建立连接之前 WebSocket 已关闭。

显示在管理面板端和网站端,之后聊天停止工作。

警告出现几次,然后显示以下错误:

enter code hereWebSocket 连接到“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
Run Code Online (Sandbox Code Playgroud)

所以应用程序在一段时间内可以正常工作,但出现此警告并且应用程序停止工作。

我无法弄清楚导致此错误的原因以及如何阻止它发生。有没有办法解决这个问题?