我在 google chrome 浏览器中创建了 60 个到 socket.io 服务器的客户端连接。服务器在特定时间将屏幕截图发送给客户端。一些作为 socket.io 子协议的 websocket 连接被破坏,因此大约 1-4 个 chrome 选项卡的连接被关闭。我尝试增加 pingTimeout,它仅有助于克服 tcp 传输关闭问题(我也有这个问题),但此解决方案无助于解决发送屏幕截图问题。
在我看来,谷歌浏览器一次不能支持大约 50-60 个选项卡,因为 CPU 和 RAM 由于向 60 个客户端发送屏幕截图而增加到最大值(每个客户端有 2 个 websocket 连接:第一个用于简单消息,第一个用于简单消息)第二个用于图形(发送屏幕截图)),因此 chrome 会关闭一些 websocket 连接。
服务器套接字 io 的部分代码如下:
// server
this.http = this._createHttpServer(sslCert, sslKey);
this.io = socketIo(this.http, {
'pingTimeout': 180000,
'pingInterval': 60000
});
const jwtAuth = socketioJwt.authorize({
secret: jwtSecret,
timeout: 15000
});
this.io.on('connection', (socket) => {
socket.once('authenticate', (data) => {
socket.rawAuthData = data;
});
jwtAuth(socket);
});
// client
var connOptions = {
"reconnectionAttempts": 2
};
var socket = io(options.url, connOptions);
socket.on('connect', function() {
if (options.token) {
socket.emit('authenticate', {token: options['token'], tag : tag});
socket.on('authenticated', function() {
ctx.printLog('Authorized. Waiting for handshake');
socket.once('tunnel-handshake', function() {
ctx.printLog('handshake received! connection is ready');
processConnected();
});
}).on('unauthorized', function(msg) {
ctx.printLog("Authorization failed: " + JSON.stringify(msg.data));
eventHandlers.onerror({ code: ctx.ERROR_CODE.INVALID_TOKEN});
});
} else {
processConnected();
}
});
socket.on('reconnect_failed', eventHandlers.onerror.bind(this, {code: 1, reason: "Reconnection failed"}));
socket.on('disconnect', eventHandlers.onclose);
socket.on('error', eventHandlers.onerror);
是否存在任何想法,原因可能是什么?这个问题有解决办法吗?是 google chrome 问题还是 socket.io 选项问题?谢谢
翻翻过去那场雪
相关分类