From 8138c76c1d47fb68a485ca1eb39ca7ab00ea8e59 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Mon, 24 Feb 2025 13:31:21 +0000 Subject: [PATCH] [web] restrict external heartbeat/server ping to websocket transport (#23830) Co-authored-by: Alf Eaton GitOrigin-RevId: c03a78e2c05cd380b705bd14652060980682cb39 --- services/real-time/app/js/Router.js | 5 ++++- .../ide-react/connection/connection-manager.ts | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/services/real-time/app/js/Router.js b/services/real-time/app/js/Router.js index a7582be210..269c86698f 100644 --- a/services/real-time/app/js/Router.js +++ b/services/real-time/app/js/Router.js @@ -175,7 +175,10 @@ module.exports = Router = { return } const useServerPing = - !!client.handshake?.query?.esh && !!client.handshake?.query?.ssp + !!client.handshake?.query?.esh && + !!client.handshake?.query?.ssp && + // No server ping with long-polling transports. + client.transport === 'websocket' const isDebugging = !!client.handshake?.query?.debugging const projectId = client.handshake?.query?.projectId diff --git a/services/web/frontend/js/features/ide-react/connection/connection-manager.ts b/services/web/frontend/js/features/ide-react/connection/connection-manager.ts index 1190ad7f72..e67dcb7e6c 100644 --- a/services/web/frontend/js/features/ide-react/connection/connection-manager.ts +++ b/services/web/frontend/js/features/ide-react/connection/connection-manager.ts @@ -248,10 +248,13 @@ export class ConnectionManager extends EventTarget { if (this.externalHeartbeatInterval) { window.clearInterval(this.externalHeartbeatInterval) } - this.externalHeartbeatInterval = window.setInterval( - () => this.sendExternalHeartbeat(), - 15_000 - ) + if (this.socket.socket.transport?.name === 'websocket') { + // Do not enable external heartbeat on polling transports. + this.externalHeartbeatInterval = window.setInterval( + () => this.sendExternalHeartbeat(), + 15_000 + ) + } } // Reset on success regardless of transport. We want to upgrade back to websocket on reconnect. this.websocketFailureCount = 0