From 02fd4199554473aa60bbdbee831bca3576c29283 Mon Sep 17 00:00:00 2001 From: Sour Dusk Date: Wed, 27 Aug 2025 00:44:26 +0000 Subject: [PATCH] feat: add 10 second JSON-RPC ping to keep websockets alive across certain reverse proxies. --- src/networking/messageGenerators.ts | 8 ++++++++ src/networking/webSocket.ts | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/src/networking/messageGenerators.ts b/src/networking/messageGenerators.ts index 86b9d35..e7e86eb 100644 --- a/src/networking/messageGenerators.ts +++ b/src/networking/messageGenerators.ts @@ -49,6 +49,14 @@ export function requestFilenames(): Message { }; } +export function ping(): Message { + return { + jsonrpc: "2.0", + method: "ping", + id: messageCounter++, + }; +} + function addLeadingSlash(path: string): string { const slashes = path.match("/"); if (slashes) return `/${path}`; diff --git a/src/networking/webSocket.ts b/src/networking/webSocket.ts index 9f26b17..ae39c79 100644 --- a/src/networking/webSocket.ts +++ b/src/networking/webSocket.ts @@ -4,6 +4,7 @@ import { config } from "../config.js"; import { EventType } from "../eventTypes.js"; import { Message } from "../interfaces.js"; import { messageTracker } from "./messageTracker.js"; +import { ping } from "./messageGenerators.js"; export function setupSocket(signaller: Signal) { const wss = new WebSocketServer({ port: config.get("port") }); @@ -23,6 +24,10 @@ export function setupSocket(signaller: Signal) { }); signaller.trigger(EventType.ConnectionMade); + + setInterval(() => { + sendMessage(ping()); + }, 10000); }); return wss;