Quellcode durchsuchen

抹茶会发送来自未来的数据包……

skyffire vor 6 Monaten
Ursprung
Commit
18430a8d59
2 geänderte Dateien mit 8 neuen und 8 gelöschten Zeilen
  1. 6 6
      src/data_manager.rs
  2. 2 2
      src/ws_manager.rs

+ 6 - 6
src/data_manager.rs

@@ -1,5 +1,5 @@
 use std::collections::HashMap;
-use std::sync::atomic::{AtomicU64, Ordering};
+use std::sync::atomic::{AtomicI64, AtomicU64, Ordering};
 use rust_decimal::Decimal;
 use serde_json::Value;
 use anyhow::Result;
@@ -11,7 +11,7 @@ pub struct DataManager {
     pub asks_map: HashMap<String, HashMap<Decimal, Decimal>>,
     pub bids_map: HashMap<String, HashMap<Decimal, Decimal>>,
 
-    pub delay_total: AtomicU64,
+    pub delay_total: AtomicI64,
     pub delay_count: AtomicU64,
 }
 
@@ -26,13 +26,13 @@ impl DataManager {
             klines_map,
             asks_map,
             bids_map,
-            delay_total: AtomicU64::new(0),
+            delay_total: AtomicI64::new(0),
             delay_count: AtomicU64::new(0),
         }
     }
 
-    pub fn record_latency(&self, received_at: i64, origin_timestamp: u64) {
-        if let Some(delay) = (received_at as u64).checked_sub(origin_timestamp) {
+    pub fn record_latency(&self, received_at: i64, origin_timestamp: i64) {
+        if let Some(delay) = received_at.checked_sub(origin_timestamp) {
             self.delay_total.fetch_add(delay, Ordering::Relaxed);       // 原子加
             self.delay_count.fetch_add(1, Ordering::Relaxed);       // 原子加
         } else {
@@ -41,7 +41,7 @@ impl DataManager {
     }
 
     // 获取当前的统计数据
-    pub fn get_delay_stats(&self) -> (u64, u64) {
+    pub fn get_delay_stats(&self) -> (i64, u64) {
         let total = self.delay_total.load(Ordering::Relaxed);
         let count = self.delay_count.load(Ordering::Relaxed);
         (total, count)

+ 2 - 2
src/ws_manager.rs

@@ -62,7 +62,7 @@ impl WsManager {
                 let dm_clone = Arc::clone(&dm);
                 async move {
                     let received_at = Utc::now().timestamp_millis();
-                    let origin_timestamp = response.data["timestamp"].as_u64().unwrap();
+                    let origin_timestamp = response.data["timestamp"].as_i64().unwrap();
 
                     let mut dm_guard = dm_clone.lock().await;
                     dm_guard.record_latency(received_at, origin_timestamp);
@@ -118,7 +118,7 @@ impl WsManager {
                     break;
                 }
 
-                let mut total_delay_sum = 0u64;
+                let mut total_delay_sum = 0i64;
                 let mut total_message_count = 0u64;
 
                 // --- 第一步:收集所有 DataManager 的统计数据 ---