在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响应等。