我在 google chrome 瀏覽器中創建了 60 個到 socket.io 服務器的客戶端連接。服務器在特定時間將屏幕截圖發送給客戶端。一些作為 socket.io 子協議的 websocket 連接被破壞,因此大約 1-4 個 chrome 選項卡的連接被關閉。我嘗試增加 pingTimeout,它僅有助于克服 tcp 傳輸關閉問題(我也有這個問題),但此解決方案無助于解決發送屏幕截圖問題。在我看來,谷歌瀏覽器一次不能支持大約 50-60 個選項卡,因為 CPU 和 RAM 由于向 60 個客戶端發送屏幕截圖而增加到最大值(每個客戶端有 2 個 websocket 連接:第一個用于簡單消息,第一個用于簡單消息)第二個用于圖形(發送屏幕截圖)),因此 chrome 會關閉一些 websocket 連接。服務器套接字 io 的部分代碼如下:// serverthis.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);});// clientvar 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 選項問題?謝謝
當 google chrome 中存在大量 websocket 連接時,socket io 會中斷
動漫人物
2023-08-05 10:16:54