diff --git a/server.py b/server.py index fe1e9d76..4656332a 100644 --- a/server.py +++ b/server.py @@ -48,24 +48,21 @@ async def broadcast_handler(websocket: websockets.WebSocketServerProtocol): pass # Broadcast to all OTHER clients - if not clients: - continue - disconnected = set() - # Create broadcast tasks for efficiency - tasks = [] + # Create broadcast tasks paired with their target client + task_client_pairs = [] for client in clients: if client != websocket and client.open: - tasks.append(asyncio.create_task(client.send(message))) - - if tasks: + task = asyncio.create_task(client.send(message)) + task_client_pairs.append((task, client)) + + if task_client_pairs: + tasks = [t for t, _ in task_client_pairs] results = await asyncio.gather(*tasks, return_exceptions=True) - for i, result in enumerate(results): + for (task, client), result in zip(task_client_pairs, results): if isinstance(result, Exception): - # Find the client that failed - target_client = [c for c in clients if c != websocket][i] - logger.error(f"Failed to send to a client {target_client.remote_address}: {result}") - disconnected.add(target_client) + logger.error(f"Failed to send to a client {client.remote_address}: {result}") + disconnected.add(client) if disconnected: clients.difference_update(disconnected)