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