|
|
@@ -10,6 +10,7 @@ import logging
|
|
|
import traceback
|
|
|
from typing import Any, Dict, Optional
|
|
|
from fastapi import WebSocket
|
|
|
+from starlette.websockets import WebSocketDisconnect
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@@ -125,11 +126,19 @@ class WebSocketHandler:
|
|
|
|
|
|
# 处理消息
|
|
|
await self.handle_message(message_data)
|
|
|
-
|
|
|
+
|
|
|
+ except WebSocketDisconnect as e:
|
|
|
+ close_code = getattr(e, "code", None)
|
|
|
+ reason = getattr(e, "reason", None)
|
|
|
+ logger.warning(f"[{self.user_id}] ⚠️ WebSocket断开: code={close_code}, reason={reason}")
|
|
|
+
|
|
|
except Exception as e:
|
|
|
- pass
|
|
|
+ logger.error(f"[{self.user_id}] ❌ WebSocket异常: {e.__class__.__name__}: {e}")
|
|
|
+ logger.error(traceback.format_exc())
|
|
|
+
|
|
|
finally:
|
|
|
- pass
|
|
|
+ close_code = getattr(self.websocket, "close_code", None)
|
|
|
+ logger.info(f"[{self.user_id}] ℹ️ WebSocket连接结束,close_code={close_code}")
|
|
|
|
|
|
async def handle_message(self, message_data: dict):
|
|
|
"""处理接收到的消息"""
|