|
|
|
@ -68,7 +68,7 @@ class WebSocketAdapter: |
|
|
|
|
|
|
|
async def _send_loop(self): |
|
|
|
"""发送循环:优先处理优先级Channel,其次处理普通出站Channel""" |
|
|
|
logger.debug(f"发送循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name})") |
|
|
|
logger.info(f"发送循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name})") |
|
|
|
try: |
|
|
|
# 优先级Channel命名约定:f"{outbound}_priority";不存在则仅用普通通道 |
|
|
|
priority_channel_name = f"{self.outbound_channel.name}_priority" |
|
|
|
@ -167,15 +167,17 @@ class WebSocketAdapter: |
|
|
|
|
|
|
|
async def _heartbeat_loop(self): |
|
|
|
"""心跳循环:以优先级消息写入,并由发送循环优先处理""" |
|
|
|
logger.debug(f"心跳循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name}) 间隔:{self.heartbeat_interval}秒") |
|
|
|
logger.info(f"心跳循环启动: {self.client.name} (out:{self.outbound_channel.name} / in:{self.inbound_channel.name}) 间隔:{self.heartbeat_interval}秒") |
|
|
|
try: |
|
|
|
priority_channel_name = f"{self.outbound_channel.name}_priority" |
|
|
|
from app.core.websocket.manager import websocket_manager |
|
|
|
# 确保优先级通道存在并连接 |
|
|
|
pch = websocket_manager.get_channel(priority_channel_name) |
|
|
|
if not pch: |
|
|
|
logger.info(f"创建优先级通道: {priority_channel_name}") |
|
|
|
pch = await websocket_manager.create_channel(priority_channel_name, max_size=100) |
|
|
|
await pch.connect() |
|
|
|
logger.info(f"优先级通道连接成功: {priority_channel_name}") |
|
|
|
|
|
|
|
while self.client.is_connected: |
|
|
|
try: |
|
|
|
@ -183,13 +185,15 @@ class WebSocketAdapter: |
|
|
|
payload = json.dumps({"Message": "ping"}) |
|
|
|
msg = ChannelMessage(type="heartbeat", data=payload) |
|
|
|
await pch.send_message(msg) |
|
|
|
logger.debug(f"心跳消息已发送: {self.client.name} -> {priority_channel_name}") |
|
|
|
await asyncio.sleep(self.heartbeat_interval) |
|
|
|
except asyncio.CancelledError: |
|
|
|
logger.info(f"心跳任务被取消: {self.client.name}") |
|
|
|
break |
|
|
|
except Exception as e: |
|
|
|
logger.error(f"心跳写入优先级Channel失败: {e}") |
|
|
|
await asyncio.sleep(5) |
|
|
|
except asyncio.CancelledError: |
|
|
|
logger.info("心跳任务已取消") |
|
|
|
logger.info(f"心跳任务已取消: {self.client.name}") |
|
|
|
except Exception as e: |
|
|
|
logger.error(f"心跳任务异常: {e}") |
|
|
|
logger.error(f"心跳任务异常: {self.client.name} - {e}") |