Browse Source

优化心跳发送逻辑,避免与业务消息竞争

- 修改 HeartbeatLoopAsync 方法,只在没有待发送消息时才发送心跳
- 使用 _channelManager.SendChannel.Count 检查发送通道状态
- 添加详细日志记录,便于生产环境监控
- 避免心跳消息与业务消息竞争发送通道,提高性能"
feature/protocol-log-Perfect
root 1 week ago
parent
commit
dfdd8cdf31
  1. 16
      CoreAgent.WebSocketTransport/Services/WebSocketTransport.cs

16
CoreAgent.WebSocketTransport/Services/WebSocketTransport.cs

@ -286,8 +286,20 @@ public class WebSocketTransport : IWebSocketTransport
{
if (_isConnected && _connection.IsConnected)
{
_channelManager.PriorityChannel.TryWrite(new HeartbeatMessage());
UpdateHeartbeat();
// 检查发送通道是否有待发送的消息
var hasPendingMessages = _channelManager.SendChannel.Count > 0;
if (!hasPendingMessages)
{
_channelManager.PriorityChannel.TryWrite(new HeartbeatMessage());
UpdateHeartbeat();
_logger.LogTrace("发送心跳消息");
}
else
{
_logger.LogTrace("有待发送消息 ({MessageCount} 条),跳过心跳发送",
_channelManager.SendChannel.Count);
}
}
await Task.Delay(TimeSpan.FromSeconds(120), cancellationToken);
}

Loading…
Cancel
Save