在Axum Rust中处理异步请求非常简单,因为Axum是基于Tokio异步运行时的。以下是一个简单的示例,展示了如何使用Axum处理异步HTTP请求:
首先,确保你已经安装了Axum和Tokio:
cargo add axum tokio
然后,创建一个名为main.rs
的文件,并添加以下代码:
use axum::prelude::*; use axum::service::{make_service_fn, service_fn}; use hyper::service::{make_service_fn as hyper_service_fn, service_fn as hyper_service_fn_with_name}; use hyper::{Body, Request, Response, Server}; use std::convert::Infallible; use tokio::sync::oneshot; async fn handle_request(req: Request) -> Result, Infallible> { // 在这里处理你的异步逻辑 Ok(Response::new(Body::from("Hello, world!"))) } #[tokio::main] async fn main() { // 创建一个Axum服务 let app = make_service_fn(|_conn| async { Ok::<_, Infallible>(service_fn(handle_request)) }); // 创建一个Hyper服务器 let server = Server::bind(&std::net::SocketAddr::from(([127, 0, 0, 1], 3000))).serve(app); // 运行服务器 if let Err(e) = server.await { eprintln!("server error: {}", e); } }
在这个示例中,我们创建了一个简单的Axum服务,它使用handle_request
函数处理HTTP请求。handle_request
函数可以包含任何异步逻辑,例如与数据库交互、调用其他API等。
注意,我们还在main
函数中创建了一个Hyper服务器,并将其与Axum服务绑定在一起。这是因为Axum基于Hyper构建,因此我们需要使用Hyper服务器来监听端口。
要运行此示例,请在终端中输入以下命令:
cargo run
现在,你可以使用浏览器或其他HTTP客户端访问http://localhost:3000
,你应该会看到"Hello, world!"的响应。