2026-01-25 22:34:33 +08:00
|
|
|
|
"""WebSocket 路由处理器。
|
|
|
|
|
|
|
|
|
|
|
|
当前实现仅用于维持连接并将连接注册到 Broadcaster,便于服务端主动推送消息。
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2026-01-19 14:27:41 +08:00
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
|
|
from fastapi import WebSocket, WebSocketDisconnect
|
|
|
|
|
|
|
|
|
|
|
|
from backend.services.broadcaster import Broadcaster
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def websocket_handler(ws: WebSocket, broadcaster: Broadcaster) -> None:
|
2026-01-25 22:34:33 +08:00
|
|
|
|
"""WebSocket 连接处理:接入、注册、保持心跳、断开清理。"""
|
2026-01-19 14:27:41 +08:00
|
|
|
|
await ws.accept()
|
|
|
|
|
|
await broadcaster.add(ws)
|
2026-01-25 22:34:33 +08:00
|
|
|
|
logger.info("WebSocket 连接接入:%s", ws.client)
|
2026-01-19 14:27:41 +08:00
|
|
|
|
try:
|
|
|
|
|
|
while True:
|
|
|
|
|
|
await ws.receive_text()
|
|
|
|
|
|
except WebSocketDisconnect:
|
|
|
|
|
|
# 客户端正常断开连接,无需打印堆栈信息
|
|
|
|
|
|
pass
|
|
|
|
|
|
finally:
|
|
|
|
|
|
await broadcaster.remove(ws)
|
2026-01-25 22:34:33 +08:00
|
|
|
|
logger.info("WebSocket 连接断开:%s", ws.client)
|