summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchristine betts <[email protected]>2025-07-18 19:33:04 +0000
committerGitHub <[email protected]>2025-07-18 19:33:04 +0000
commitd7041a6595c1d67c19e2e94866c788b157fa9fb1 (patch)
treedc63af6ab69aa57fd76c0a1bb593087396a129b7
parent18c3bf3a4206d5d3be41b2510ec3940760a15e9f (diff)
[ide-mode] Send ping every 30 seconds to prevent client from closing connection (#4329)
-rw-r--r--packages/vscode-ide-companion/src/ide-server.ts15
1 files changed, 15 insertions, 0 deletions
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);