Browse Source

心跳问题

origin/hotfix/hlk-flight
root 4 months ago
parent
commit
4892a24acf
  1. 12
      app/core/websocket/adapter.py
  2. 39
      modify.md

12
app/core/websocket/adapter.py

@ -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}")

39
modify.md

@ -2,6 +2,45 @@
## 2025-08-11
### WebSocket心跳循环日志增强
**问题**:WebSocket适配器启动后,`_heartbeat_loop` 和 `_send_loop` 的启动日志没有显示,无法确认心跳任务是否正常启动
**解决方案**:
1. 将 `_heartbeat_loop``_send_loop` 的启动日志级别从 `DEBUG` 改为 `INFO`
2. 在 `_heartbeat_loop` 中添加更多调试信息,包括优先级通道的创建和连接状态
3. 增强心跳消息发送的日志记录
**文件变更**:
- 更新 `app/core/websocket/adapter.py` - 增强心跳循环的日志记录
**修改内容**:
```python
# 发送循环启动日志级别提升
logger.info(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}) 间隔:{self.heartbeat_interval}秒")
# 添加优先级通道创建和连接日志
logger.info(f"创建优先级通道: {priority_channel_name}")
logger.info(f"优先级通道连接成功: {priority_channel_name}")
# 添加心跳消息发送日志
logger.debug(f"心跳消息已发送: {self.client.name} -> {priority_channel_name}")
```
**优化效果**:
- ✅ 可以清楚看到心跳循环和发送循环的启动状态
- ✅ 能够跟踪优先级通道的创建和连接过程
- ✅ 便于调试心跳消息的发送情况
- ✅ 提供更详细的错误信息,包含客户端名称
**验证方法**:
- 创建WebSocket客户端后,应该能看到以下日志:
- "发送循环启动: test_12 (out:default / in:default)"
- "心跳循环启动: test_12 (out:default / in:default) 间隔:120秒"
- "优先级通道连接成功: default_priority"
### 日志系统循环导入问题修复
**问题**:`app/utils/log.py` 文件存在循环导入问题,导致应用无法启动
- 错误信息:`ImportError: cannot import name 'get_enhanced_logger' from partially initialized module 'app.utils.log'`

Loading…
Cancel
Save