"""WebSocket 管理 - 实时推送""" import logging import json from fastapi import WebSocket, WebSocketDisconnect logger = logging.getLogger(__name__) # 活跃连接 _connections: list[WebSocket] = [] async def ws_endpoint(websocket: WebSocket): """WebSocket 连接处理""" await websocket.accept() _connections.append(websocket) logger.info(f"WebSocket 连接建立,当前连接数: {len(_connections)}") try: while True: # 保持连接,接收客户端心跳 data = await websocket.receive_text() if data == "ping": await websocket.send_text("pong") except WebSocketDisconnect: _connections.remove(websocket) logger.info(f"WebSocket 断开,当前连接数: {len(_connections)}") async def broadcast_update(data: dict): """向所有连接推送更新""" if not _connections: return message = json.dumps(data, ensure_ascii=False, default=str) dead = [] for ws in _connections: try: await ws.send_text(message) except Exception: dead.append(ws) for ws in dead: _connections.remove(ws)