|
@@ -107,7 +107,6 @@ impl WsManager {
|
|
|
fn start_delay_info_reporter(&self) -> Result<(), std::io::Error> {
|
|
fn start_delay_info_reporter(&self) -> Result<(), std::io::Error> {
|
|
|
let managers_arc_clone = Arc::clone(&self.managers);
|
|
let managers_arc_clone = Arc::clone(&self.managers);
|
|
|
let running_clone = Arc::clone(&self.running);
|
|
let running_clone = Arc::clone(&self.running);
|
|
|
- const RESET_THRESHOLD: u64 = 1_0000_0000; // 1亿次计数阈值
|
|
|
|
|
|
|
|
|
|
spawn(async move {
|
|
spawn(async move {
|
|
|
let mut interval = tokio::time::interval(Duration::from_secs(60));
|
|
let mut interval = tokio::time::interval(Duration::from_secs(60));
|
|
@@ -121,7 +120,6 @@ impl WsManager {
|
|
|
|
|
|
|
|
let mut total_delay_sum = 0u64;
|
|
let mut total_delay_sum = 0u64;
|
|
|
let mut total_message_count = 0u64;
|
|
let mut total_message_count = 0u64;
|
|
|
- let mut needs_reset = false; // 标记是否需要重置
|
|
|
|
|
|
|
|
|
|
// --- 第一步:收集所有 DataManager 的统计数据 ---
|
|
// --- 第一步:收集所有 DataManager 的统计数据 ---
|
|
|
let managers_guard = managers_arc_clone.lock().await; // 锁定 Vec<Arc<Mutex<DataManager>>>
|
|
let managers_guard = managers_arc_clone.lock().await; // 锁定 Vec<Arc<Mutex<DataManager>>>
|
|
@@ -134,9 +132,8 @@ impl WsManager {
|
|
|
total_delay_sum = total_delay_sum.saturating_add(current_sum);
|
|
total_delay_sum = total_delay_sum.saturating_add(current_sum);
|
|
|
total_message_count = total_message_count.saturating_add(current_count);
|
|
total_message_count = total_message_count.saturating_add(current_count);
|
|
|
|
|
|
|
|
- // 可以在这里检查总数是否已超阈值,但为了逻辑清晰,我们在聚合后检查
|
|
|
|
|
|
|
+ manager_lock.reset_delay_stats(); // 调用重置方法 (使用原子写)
|
|
|
}
|
|
}
|
|
|
- // 释放 managers_guard (Vec 的锁)
|
|
|
|
|
|
|
|
|
|
// --- 第二步:计算并报告平均延迟 ---
|
|
// --- 第二步:计算并报告平均延迟 ---
|
|
|
if total_message_count > 0 {
|
|
if total_message_count > 0 {
|
|
@@ -145,30 +142,9 @@ impl WsManager {
|
|
|
"当前 WS 平均延迟: {:.2} 毫秒 (基于 {} 条消息测量)",
|
|
"当前 WS 平均延迟: {:.2} 毫秒 (基于 {} 条消息测量)",
|
|
|
average_delay, total_message_count
|
|
average_delay, total_message_count
|
|
|
);
|
|
);
|
|
|
-
|
|
|
|
|
- // 检查是否达到重置阈值
|
|
|
|
|
- if total_message_count >= RESET_THRESHOLD { // 使用 >= 更安全
|
|
|
|
|
- needs_reset = true;
|
|
|
|
|
- info!(
|
|
|
|
|
- "总消息计数 {} >= 阈值 {}, 将在本次报告后重置所有计数器。",
|
|
|
|
|
- total_message_count, RESET_THRESHOLD
|
|
|
|
|
- );
|
|
|
|
|
- }
|
|
|
|
|
} else {
|
|
} else {
|
|
|
info!("WS 延迟报告:本周期内未收到用于计算延迟的消息。");
|
|
info!("WS 延迟报告:本周期内未收到用于计算延迟的消息。");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // --- 第三步:如果需要,执行重置 ---
|
|
|
|
|
- if needs_reset {
|
|
|
|
|
- // 再次获取 Vec 的锁来执行重置操作
|
|
|
|
|
- let managers_guard_for_reset = managers_arc_clone.lock().await;
|
|
|
|
|
- for manager_arc in managers_guard_for_reset.iter() {
|
|
|
|
|
- let manager_lock = manager_arc.lock().await; // 锁定 DataManager
|
|
|
|
|
- manager_lock.reset_delay_stats(); // 调用重置方法 (使用原子写)
|
|
|
|
|
- }
|
|
|
|
|
- // 释放锁
|
|
|
|
|
- info!("所有 DataManager 的延迟统计已重置。");
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
info!("延迟报告任务已停止。");
|
|
info!("延迟报告任务已停止。");
|
|
|
});
|
|
});
|