From 5d7a697c2be9d0e816b40f54c6bc52c4073838ed Mon Sep 17 00:00:00 2001 From: DevilXD <4180725+DevilXD@users.noreply.github.com> Date: Wed, 19 Nov 2025 21:24:08 +0100 Subject: [PATCH] Add chunking to the websocket topics management --- websocket.py | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/websocket.py b/websocket.py index 7ad044f..7bac405 100644 --- a/websocket.py +++ b/websocket.py @@ -14,6 +14,7 @@ from exceptions import MinerException, WebsocketClosed from constants import PING_INTERVAL, PING_TIMEOUT, MAX_WEBSOCKETS, WS_TOPICS_LIMIT from utils import ( CHARS_ASCII, + chunk, task_wrapper, create_nonce, json_minify, @@ -210,30 +211,32 @@ class Websocket: if removed: topics_list = list(map(str, removed)) ws_logger.debug(f"Websocket[{self._idx}]: Removing topics: {', '.join(topics_list)}") - await self.send( - { - "type": "UNLISTEN", - "data": { - "topics": topics_list, - "auth_token": auth_state.access_token, + for topics in chunk(topics_list, 20): + await self.send( + { + "type": "UNLISTEN", + "data": { + "topics": topics, + "auth_token": auth_state.access_token, + } } - } - ) + ) self._submitted.difference_update(removed) # handle added topics added = current.difference(self._submitted) if added: topics_list = list(map(str, added)) ws_logger.debug(f"Websocket[{self._idx}]: Adding topics: {', '.join(topics_list)}") - await self.send( - { - "type": "LISTEN", - "data": { - "topics": topics_list, - "auth_token": auth_state.access_token, + for topics in chunk(topics_list, 20): + await self.send( + { + "type": "LISTEN", + "data": { + "topics": topics, + "auth_token": auth_state.access_token, + } } - } - ) + ) self._submitted.update(added) async def _gather_recv(self, messages: list[JsonType], timeout: float = 0.5):