From b3cbf956c2e32aa25725eab028a710a94cd9ae01 Mon Sep 17 00:00:00 2001 From: frytimo Date: Fri, 6 Feb 2026 10:24:55 -0400 Subject: [PATCH] Add reconnection delay to prevent high CPU usage when server is unavailable. (#7737) When the websocket server is unavailable the connection tries to reconnect too fast causing a high CPU usage. Adding a check for the connection status and sleeping when it is not yet connected after a re-connect attempt prevents the high CPU usage. Fixed the method signature in create_filter_chain_for to exactly match that of the parent to avoid potential PHP warnings or errors. --- .../resources/classes/active_conferences_service.php | 4 ++-- .../resources/classes/base_websocket_system_service.php | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/active_conferences/resources/classes/active_conferences_service.php b/app/active_conferences/resources/classes/active_conferences_service.php index d8fc7aecee..a08121ce40 100644 --- a/app/active_conferences/resources/classes/active_conferences_service.php +++ b/app/active_conferences/resources/classes/active_conferences_service.php @@ -178,9 +178,9 @@ class active_conferences_service extends base_websocket_system_service implement * * @param subscriber $subscriber * - * @return filter + * @return filter|null */ - public static function create_filter_chain_for(subscriber $subscriber): filter { + public static function create_filter_chain_for(subscriber $subscriber): ?filter { // Domain filtering for conferences if ($subscriber->has_permission('conference_active_view')) { return filter_chain::and_link([ diff --git a/core/websockets/resources/classes/base_websocket_system_service.php b/core/websockets/resources/classes/base_websocket_system_service.php index 9f2741ce62..6010ee7c81 100644 --- a/core/websockets/resources/classes/base_websocket_system_service.php +++ b/core/websockets/resources/classes/base_websocket_system_service.php @@ -167,6 +167,11 @@ abstract class base_websocket_system_service extends service implements websocke if (!$suppress_ws_message) $this->error("Unable to connect to websocket server."); $suppress_ws_message = true; } + if (!$this->ws_client->is_connected()) { + // Sleep for a bit before trying to reconnect to prevent flooding the logs with connection errors + sleep(1); + continue; + } } if ($this->ws_client !== null && $this->ws_client->is_connected()) {