在Rust中,實現HTTP并發主要依賴于異步編程和Tokio庫。以下是一個簡單的示例,展示了如何使用Tokio庫創建一個并發HTTP客戶端。
首先,確保在你的Cargo.toml
文件中添加了Tokio庫的依賴:
[dependencies]
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.11", features = ["json"] }
接下來,創建一個名為main.rs
的文件,并編寫以下代碼:
use reqwest::Error;
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Error> {
// 創建一個異步HTTP客戶端
let client = reqwest::Client::builder()
.timeout(Duration::from_secs(5))
.build()?;
// 創建一個任務列表,包含多個URL
let urls = vec![
"https://jsonplaceholder.typicode.com/todos/1",
"https://jsonplaceholder.typicode.com/todos/2",
"https://jsonplaceholder.typicode.com/todos/3",
];
// 使用Tokio的join!宏并發地執行所有HTTP請求
let results = tokio::join!(
client.get(urls[0]).send(),
client.get(urls[1]).send(),
client.get(urls[2]).send()
);
// 處理每個請求的結果
for (url, result) in urls.into_iter().zip(results) {
match result {
Ok(response) => {
if response.status().is_success() {
let body = response.text().await?;
println!("URL: {}, Response: {}", url, body);
} else {
eprintln!("URL: {}, Error: {}", url, response.status());
}
}
Err(e) => eprintln!("URL: {}, Error: {}", url, e),
}
}
Ok(())
}
在這個示例中,我們首先創建了一個異步HTTP客戶端,然后定義了一個包含多個URL的任務列表。接下來,我們使用Tokio的join!
宏并發地執行所有HTTP請求。最后,我們處理每個請求的結果,打印響應內容或錯誤信息。
這個示例展示了如何使用Rust和Tokio庫實現HTTP并發。你可以根據自己的需求修改代碼,例如添加更多的URL、處理JSON響應等。