diff --git a/desktop/flipper-server-core/src/server/attachSocketServer.tsx b/desktop/flipper-server-core/src/server/attachSocketServer.tsx index fbcada23a9a..55116c5644b 100644 --- a/desktop/flipper-server-core/src/server/attachSocketServer.tsx +++ b/desktop/flipper-server-core/src/server/attachSocketServer.tsx @@ -17,6 +17,7 @@ import { SystemError, getLogger, CompanionEventWebSocketMessage, + isProduction, } from 'flipper-common'; import {FlipperServerImpl} from '../FlipperServerImpl'; import {RawData, WebSocketServer} from 'ws'; @@ -38,6 +39,7 @@ const safe = (f: () => void) => { }; let numberOfConnectedClients = 0; +let disconnectTimeout: NodeJS.Timeout | undefined; /** * Attach and handle incoming messages from clients. @@ -239,10 +241,19 @@ export function attachSocketServer( flipperServerCompanion?.destroyAll(); if (getFlipperServerConfig().environmentInfo.isHeadlessBuild) { - if (numberOfConnectedClients === 0) { - console.info('Shutdown as no clients are currently connected'); - process.exit(0); + if (disconnectTimeout) { + clearTimeout(disconnectTimeout); } + + /** + * If, after 60 seconds, there are no more connected clients, we exit the process. + */ + disconnectTimeout = setTimeout(() => { + if (numberOfConnectedClients === 0 && isProduction()) { + console.info('Shutdown as no clients are currently connected'); + process.exit(0); + } + }, 60 * 1000); } }