From 2ef41402209b82279656ae4b1affe6484be1ed77 Mon Sep 17 00:00:00 2001 From: Osmium Sorcerer Date: Mon, 16 Mar 2026 14:12:22 +0000 Subject: Remove CH-sending timer CH is an application-level keepalive packet that clients periodically send for two reasons: 1. It tells the server they're still connected, preventing timeouts. 2. By measuring latency between sending CH and receiving CHECK, a client can display ping. Keepalive is redundant because WebSocket can handle that via PING frames on a transport layer. WebAO also completely ignores CHECK and sends CH every five seconds, which is superfluous (AO2 Client sends it once every 45 seconds, in comparison). Sending CH via `setInterval` was also problematic: browsers seem to throttle it when the tab becomes inactive, preventing periodic pings and leading to the server disconnecting inactive browser clients. --- webAO/client.ts | 11 +---------- webAO/client/sender/index.ts | 3 --- webAO/client/sender/sendCheck.ts | 8 -------- 3 files changed, 1 insertion(+), 21 deletions(-) delete mode 100644 webAO/client/sender/sendCheck.ts diff --git a/webAO/client.ts b/webAO/client.ts index 703ce73..0699f6b 100644 --- a/webAO/client.ts +++ b/webAO/client.ts @@ -145,7 +145,6 @@ class Client extends EventEmitter { selectedEmote: number; selectedEvidence: number; sender: ISender; - checkUpdater: any; _lastTimeICReceived: any; viewport: Viewport; partial_packet: boolean; @@ -209,7 +208,6 @@ class Client extends EventEmitter { this.resources = getResources(AO_HOST, theme); this.selectedEmote = -1; this.selectedEvidence = -1; - this.checkUpdater = null; this.sender = sender; this.viewport = masterViewport(); this._lastTimeICReceived = new Date(0); @@ -268,9 +266,6 @@ class Client extends EventEmitter { document.getElementById("client_charselect").remove(); document.getElementById("client_ooc").remove(); } - if (mode !== "replay") { - this.checkUpdater = setInterval(() => this.sender.sendCheck(), 5000); - } } /** @@ -386,12 +381,8 @@ class Client extends EventEmitter { this.cleanup(); } - /** - * Stop sending keepalives to the server. - */ cleanup() { - clearInterval(this.checkUpdater); - if (this.serv) this.serv.close(); + this.serv.close(); } /** diff --git a/webAO/client/sender/index.ts b/webAO/client/sender/index.ts index e218b6b..b9e2b4f 100644 --- a/webAO/client/sender/index.ts +++ b/webAO/client/sender/index.ts @@ -1,7 +1,6 @@ import { sendIC } from "./sendIC"; import { sendSelf } from "./sendSelf"; import { sendServer } from "./sendServer"; -import { sendCheck } from "./sendCheck"; import { sendHP } from "./sendHP"; import { sendOOC } from "./sendOOC"; import { sendCharacter } from "./sendCharacter"; @@ -43,7 +42,6 @@ export interface ISender { ) => void; sendSelf: (message: string) => void; sendServer: (message: string) => void; - sendCheck: () => void; sendHP: (side: number, hp: number) => void; sendOOC: (message: string) => void; sendCharacter: (character: number) => void; @@ -59,7 +57,6 @@ export const sender = { sendIC, sendSelf, sendServer, - sendCheck, sendHP, sendOOC, sendCharacter, diff --git a/webAO/client/sender/sendCheck.ts b/webAO/client/sender/sendCheck.ts deleted file mode 100644 index 7eb4751..0000000 --- a/webAO/client/sender/sendCheck.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { client } from "../../client"; - -/** - * Sends a keepalive packet. - */ -export const sendCheck = () => { - client.sender.sendServer(`CH#${client.charID}#%`); -}; -- cgit