From 971861010485f0ce7b77d24491a7cbe6fb84d8c7 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 11 Nov 2024 16:26:30 +0000 Subject: [PATCH] regularly ping acceleration websocket server --- backend/src/api/services/acceleration.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/backend/src/api/services/acceleration.ts b/backend/src/api/services/acceleration.ts index 5fa6dc554..cb84ab8dc 100644 --- a/backend/src/api/services/acceleration.ts +++ b/backend/src/api/services/acceleration.ts @@ -49,6 +49,7 @@ class AccelerationApi { private websocketPath = config.MEMPOOL_SERVICES?.API ? `${config.MEMPOOL_SERVICES.API.replace('https://', 'wss://').replace('http://', 'ws://')}/accelerator/ws` : '/'; private _accelerations: Record = {}; private lastPoll = 0; + private lastPing = 0; private forcePoll = false; private myAccelerations: Record = {}; @@ -267,12 +268,27 @@ class AccelerationApi { this.ws.on('message', (data, isBinary) => { try { - const parsedMsg = JSON.parse((isBinary ? data : data.toString()) as string); + const msg = (isBinary ? data : data.toString()) as string; + const parsedMsg = msg?.length ? JSON.parse(msg) : null; this.handleWebsocketMessage(parsedMsg); } catch (e) { logger.warn('Failed to parse acceleration websocket message: ' + (e instanceof Error ? e.message : e)); } }); + + this.ws.on('ping', () => { + logger.debug('received ping from acceleration websocket server'); + }); + + this.ws.on('pong', () => { + logger.debug('received pong from acceleration websocket server'); + }); + } else { + if (Date.now() - this.lastPing > 30000) { + logger.debug('sending ping to acceleration websocket server'); + this.ws.ping(); + this.lastPing = Date.now(); + } } await new Promise(resolve => setTimeout(resolve, 5000)); }