From e490f375eee513b05aedf062d3f10504b99be4fc Mon Sep 17 00:00:00 2001 From: Jake Barnby Date: Thu, 5 Feb 2026 20:48:40 +1300 Subject: [PATCH] Batch groups --- app/realtime.php | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/app/realtime.php b/app/realtime.php index 4169b9f8bc..9a058fbacb 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -433,11 +433,18 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, $subscribers = $realtime->getSubscribers($event); + $groups = []; foreach ($subscribers as $id => $matched) { - $data = $event['data']; - $data['subscriptions'] = array_keys($matched); + $key = implode(',', array_keys($matched)); + $groups[$key]['ids'][] = $id; + $groups[$key]['subscriptions'] = array_keys($matched); + } - $server->send([$id], json_encode([ + foreach ($groups as $group) { + $data = $event['data']; + $data['subscriptions'] = $group['subscriptions']; + + $server->send($group['ids'], json_encode([ 'type' => 'event', 'data' => $data ])); @@ -514,17 +521,24 @@ $server->onWorkerStart(function (int $workerId) use ($server, $register, $stats, Console::log("[Debug][Worker {$workerId}] Event: " . $payload); } - $total = 0; - + // Group connections by matched subscription IDs for batch sending + $groups = []; foreach ($receivers as $id => $matched) { - $data = $event['data']; - $data['subscriptions'] = array_keys($matched); + $key = implode(',', array_keys($matched)); + $groups[$key]['ids'][] = $id; + $groups[$key]['subscriptions'] = array_keys($matched); + } - $server->send([$id], json_encode([ + $total = 0; + foreach ($groups as $group) { + $data = $event['data']; + $data['subscriptions'] = $group['subscriptions']; + + $server->send($group['ids'], json_encode([ 'type' => 'event', 'data' => $data ])); - $total++; + $total += count($group['ids']); } if ($total > 0) {