Browse Source

收数据

origin/hotfix/hlk-flight
root 4 months ago
parent
commit
5bb739bb2c
  1. 15
      app/core/websocket/client.py

15
app/core/websocket/client.py

@ -193,12 +193,16 @@ class WebSocketClient:
单一职责只负责接收数据并调用处理器不处理业务逻辑 单一职责只负责接收数据并调用处理器不处理业务逻辑
""" """
logger.info(f"WebSocket客户端 {self.name} 开始接收消息循环")
try: try:
while self.is_connected: while self.is_connected:
try: try:
logger.debug(f"WebSocket客户端 {self.name} 等待接收消息...")
message = await self._websocket.recv() message = await self._websocket.recv()
self._last_message_at = datetime.now() self._last_message_at = datetime.now()
logger.info(f"WebSocket客户端 {self.name} 收到原始消息: {message}")
# 调用消息处理器 # 调用消息处理器
await self._handle_message(message) await self._handle_message(message)
@ -213,6 +217,8 @@ class WebSocketClient:
logger.info(f"WebSocket客户端 {self.name} 接收任务已取消") logger.info(f"WebSocket客户端 {self.name} 接收任务已取消")
except Exception as e: except Exception as e:
logger.error(f"WebSocket客户端 {self.name} 接收任务异常: {e}") logger.error(f"WebSocket客户端 {self.name} 接收任务异常: {e}")
finally:
logger.info(f"WebSocket客户端 {self.name} 接收消息循环结束")
async def _handle_message(self, message: Any): async def _handle_message(self, message: Any):
"""处理接收到的消息 """处理接收到的消息
@ -220,33 +226,42 @@ class WebSocketClient:
单一职责只负责调用注册的处理器不处理业务逻辑 单一职责只负责调用注册的处理器不处理业务逻辑
""" """
try: try:
logger.debug(f"WebSocket客户端 {self.name} 开始处理消息: {message}")
# 尝试解析JSON消息 # 尝试解析JSON消息
if isinstance(message, str): if isinstance(message, str):
try: try:
parsed_message = json.loads(message) parsed_message = json.loads(message)
message_type = parsed_message.get("type", "data") message_type = parsed_message.get("type", "data")
logger.debug(f"WebSocket客户端 {self.name} 解析JSON消息成功: type={message_type}")
except json.JSONDecodeError: except json.JSONDecodeError:
message_type = "raw" message_type = "raw"
parsed_message = {"type": "raw", "data": message} parsed_message = {"type": "raw", "data": message}
logger.debug(f"WebSocket客户端 {self.name} JSON解析失败,作为raw消息处理")
else: else:
message_type = "raw" message_type = "raw"
parsed_message = {"type": "raw", "data": message} parsed_message = {"type": "raw", "data": message}
logger.debug(f"WebSocket客户端 {self.name} 非字符串消息,作为raw消息处理")
# 调用对应的处理器 # 调用对应的处理器
handler = self._message_handlers.get(message_type) handler = self._message_handlers.get(message_type)
if handler: if handler:
logger.debug(f"WebSocket客户端 {self.name} 调用消息处理器: {message_type}")
if asyncio.iscoroutinefunction(handler): if asyncio.iscoroutinefunction(handler):
await handler(parsed_message) await handler(parsed_message)
else: else:
handler(parsed_message) handler(parsed_message)
logger.debug(f"WebSocket客户端 {self.name} 消息处理器调用完成: {message_type}")
else: else:
# 调用通配符处理器 # 调用通配符处理器
wildcard_handler = self._message_handlers.get("*") wildcard_handler = self._message_handlers.get("*")
if wildcard_handler: if wildcard_handler:
logger.debug(f"WebSocket客户端 {self.name} 调用通配符处理器")
if asyncio.iscoroutinefunction(wildcard_handler): if asyncio.iscoroutinefunction(wildcard_handler):
await wildcard_handler(parsed_message) await wildcard_handler(parsed_message)
else: else:
wildcard_handler(parsed_message) wildcard_handler(parsed_message)
logger.debug(f"WebSocket客户端 {self.name} 通配符处理器调用完成")
else: else:
logger.debug(f"WebSocket客户端 {self.name} 收到未处理的消息类型: {message_type}") logger.debug(f"WebSocket客户端 {self.name} 收到未处理的消息类型: {message_type}")

Loading…
Cancel
Save