Merge branch 'refactor/backend-architecture' into development
This commit is contained in:
45
api/app/features/conversation/ws/connection_manager.py
Normal file
45
api/app/features/conversation/ws/connection_manager.py
Normal file
@@ -0,0 +1,45 @@
|
||||
"""WebSocket 连接管理器:仅负责连接注册/注销和消息收发"""
|
||||
from app.core.logging import get_logger
|
||||
from typing import Dict
|
||||
|
||||
from fastapi import HTTPException, WebSocket
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class ConnectionManager:
|
||||
"""WebSocket 连接管理器"""
|
||||
|
||||
def __init__(self):
|
||||
self.active_connections: Dict[str, WebSocket] = {}
|
||||
|
||||
async def connect(self, websocket: WebSocket, conversation_id: str):
|
||||
"""建立连接"""
|
||||
await websocket.accept()
|
||||
self.active_connections[conversation_id] = websocket
|
||||
|
||||
async def disconnect(self, conversation_id: str):
|
||||
"""断开连接"""
|
||||
if conversation_id in self.active_connections:
|
||||
del self.active_connections[conversation_id]
|
||||
|
||||
async def send_message(self, conversation_id: str, message: dict):
|
||||
"""发送消息"""
|
||||
if conversation_id in self.active_connections:
|
||||
websocket = self.active_connections[conversation_id]
|
||||
try:
|
||||
await websocket.send_json(message)
|
||||
except (RuntimeError, Exception) as e:
|
||||
logger.warning(f"发送消息失败 (conversation_id={conversation_id}): {e}")
|
||||
if conversation_id in self.active_connections:
|
||||
del self.active_connections[conversation_id]
|
||||
|
||||
async def receive_message(self, conversation_id: str) -> dict:
|
||||
"""接收消息"""
|
||||
if conversation_id in self.active_connections:
|
||||
websocket = self.active_connections[conversation_id]
|
||||
return await websocket.receive_json()
|
||||
raise HTTPException(status_code=404, detail="Connection not found")
|
||||
|
||||
|
||||
manager = ConnectionManager()
|
||||
Reference in New Issue
Block a user