From d7041a6595c1d67c19e2e94866c788b157fa9fb1 Mon Sep 17 00:00:00 2001 From: christine betts Date: Fri, 18 Jul 2025 19:33:04 +0000 Subject: [PATCH] [ide-mode] Send ping every 30 seconds to prevent client from closing connection (#4329) --- packages/vscode-ide-companion/src/ide-server.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/vscode-ide-companion/src/ide-server.ts b/packages/vscode-ide-companion/src/ide-server.ts index 497929a4..d14b0d7a 100644 --- a/packages/vscode-ide-companion/src/ide-server.ts +++ b/packages/vscode-ide-companion/src/ide-server.ts @@ -75,7 +75,22 @@ export class IDEServer { transports[newSessionId] = transport; }, }); + + const keepAlive = setInterval(() => { + try { + transport.send({ jsonrpc: '2.0', method: 'ping' }); + } catch (e) { + // If sending a ping fails, the connection is likely broken. + // Log the error and clear the interval to prevent further attempts. + this.logger.append( + 'Failed to send keep-alive ping, cleaning up interval.' + e, + ); + clearInterval(keepAlive); + } + }, 60000); // Send ping every 60 seconds + transport.onclose = () => { + clearInterval(keepAlive); if (transport.sessionId) { this.logger.appendLine(`Session closed: ${transport.sessionId}`); sessionsWithInitialNotification.delete(transport.sessionId);