在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<Body>) -> Result<Response<Body>, 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!"的響應。