From 23b0493d0b4d23143c492c9904d8364565c13349 Mon Sep 17 00:00:00 2001 From: wonfen Date: Sun, 4 May 2025 11:25:48 +0800 Subject: [PATCH] perf: optimize network requests and update logic to support aborting --- src-tauri/src/feat/clash.rs | 3 +-- .../src_crates/crate_mihomo_api/Cargo.toml | 2 +- .../src_crates/crate_mihomo_api/src/lib.rs | 18 +++++++++++------- .../src_crates/crate_mihomo_api/src/model.rs | 3 +-- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src-tauri/src/feat/clash.rs b/src-tauri/src/feat/clash.rs index 4cf8d96b..55b9b87c 100644 --- a/src-tauri/src/feat/clash.rs +++ b/src-tauri/src/feat/clash.rs @@ -107,9 +107,8 @@ pub async fn test_delay(url: String) -> anyhow::Result { let start = Instant::now(); - // 使用网络管理器发送请求,设置10秒超时 let response = NetworkManager::global() - .get(&url, proxy_type, Some(10), user_agent, false) + .get_with_interrupt(&url, proxy_type, Some(10), user_agent, false) .await; match response { diff --git a/src-tauri/src_crates/crate_mihomo_api/Cargo.toml b/src-tauri/src_crates/crate_mihomo_api/Cargo.toml index 53fd9744..c38c3a17 100644 --- a/src-tauri/src_crates/crate_mihomo_api/Cargo.toml +++ b/src-tauri/src_crates/crate_mihomo_api/Cargo.toml @@ -9,6 +9,6 @@ debug = [] reqwest = { version = "0.12.15", features = ["json"] } serde = { version = "1.0.219", features = ["derive"] } serde_json = "1.0.140" +tokio = { version = "1.44.1", features = ["rt", "macros", "time"] } [dev-dependencies] -tokio = { version = "1.44.1", features = ["rt", "macros"] } diff --git a/src-tauri/src_crates/crate_mihomo_api/src/lib.rs b/src-tauri/src_crates/crate_mihomo_api/src/lib.rs index dfa87a80..ec4ce4f1 100644 --- a/src-tauri/src_crates/crate_mihomo_api/src/lib.rs +++ b/src-tauri/src_crates/crate_mihomo_api/src/lib.rs @@ -9,13 +9,22 @@ pub use model::{MihomoData, MihomoManager}; impl MihomoManager { pub fn new(mihomo_server: String, headers: HeaderMap) -> Self { + let client = reqwest::ClientBuilder::new() + .default_headers(headers) + .no_proxy() + .timeout(Duration::from_secs(15)) + .pool_max_idle_per_host(5) + .pool_idle_timeout(Duration::from_secs(15)) + .build() + .expect("Failed to build reqwest client"); + Self { mihomo_server, data: Arc::new(Mutex::new(MihomoData { proxies: serde_json::Value::Null, providers_proxies: serde_json::Value::Null, })), - headers, + client, } } @@ -49,12 +58,7 @@ impl MihomoManager { url: String, data: Option, ) -> Result { - let client_response = reqwest::ClientBuilder::new() - .default_headers(self.headers.clone()) - .no_proxy() - .timeout(Duration::from_secs(60)) - .build() - .map_err(|e| e.to_string())? + let client_response = self.client .request(method.clone(), &url) .json(&data.unwrap_or(json!({}))) .send() diff --git a/src-tauri/src_crates/crate_mihomo_api/src/model.rs b/src-tauri/src_crates/crate_mihomo_api/src/model.rs index 61ab191c..f5ed1122 100644 --- a/src-tauri/src_crates/crate_mihomo_api/src/model.rs +++ b/src-tauri/src_crates/crate_mihomo_api/src/model.rs @@ -1,5 +1,4 @@ use std::sync::{Arc, Mutex}; -use reqwest::header::HeaderMap; pub struct MihomoData { pub(crate) proxies: serde_json::Value, @@ -10,7 +9,7 @@ pub struct MihomoData { pub struct MihomoManager { pub(crate) mihomo_server: String, pub(crate) data: Arc>, - pub(crate) headers: HeaderMap, + pub(crate) client: reqwest::Client, } #[cfg(feature = "debug")]