From d7b0eb9af8df2df0119f89c0792cf0e63c9b8ad4 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Mon, 6 Jul 2026 15:23:53 +0000 Subject: [PATCH] fix: clean dead sockets and relax ack timeout --- src/appv2.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/appv2.js b/src/appv2.js index e8c13e2..8d0734e 100644 --- a/src/appv2.js +++ b/src/appv2.js @@ -41,6 +41,10 @@ class Appv2 { return 10; } + get ackTimeoutMs() { + return Number(process.env.ACK_TIMEOUT_MS || 1500); + } + _takeIO() { this.app = express(); this.server = http.createServer(this.app); @@ -64,13 +68,17 @@ class Appv2 { console.log('publish to ' + room + ' data:'); console.log(req.body); const userId = room.split("_")[0]; + const connection = this.connections[userId]; - if (typeof this.connections[userId] === 'undefined') { + if (typeof connection === 'undefined' || !connection.connected) { + if (typeof connection !== 'undefined' && !connection.connected) { + delete this.connections[userId]; + } th.addToQueue(userId, req.body); this.postResponse(res, 404); return; } - this.connections[userId].timeout(100).emit('data', req.body, (err, response)=> { + connection.timeout(this.ackTimeoutMs).emit('data', req.body, (err, response)=> { let success = true; console.log(response); if(typeof response !== 'undefined') { @@ -99,9 +107,15 @@ class Appv2 { this.connections[userId] = socket; this.tryResolveQueueStorage(userId, room).then(r => console.log(r)); console.log('user ' + socket.id + ' joined to room ' + room); + socket.on('disconnect', () => { + if (this.connections[userId] === socket) { + delete this.connections[userId]; + } + console.log('user ' + socket.id + ' disconnected'); + }); + return; } socket.on('disconnect', () => { - const room = socket.handshake.query.id; console.log('user ' + socket.id + ' disconnected'); }); }