异步运行时
2025/11/7大约 1 分钟hyperlanewebrustusage-introductionasync
提示
hyperlane 框架在 v3.0.0 之前不对异步做任何处理,如果需要异步操作,可以引入第三方库
hyperlane 框架在 v3.0.0 之后内置异步机制
提示
hyperlane 框架在 v4.0.0 之前支持同步和异步中间件/路由共存。 hyperlane 框架在 v4.0.0 之后为了性能移除了同步中间件和路由( all in async ),在开启 keep-alive 情况下带来了效果 QPS 10w+的提升
框架本身异步使用
struct Route;
server.route::<Route>("/", move |_| async move {
println!("hello");
}).await;下面是使用 tokio 库的异步运行时示例代码
v4.0.0 之后版本的示例代码
use hyperlane::*;
use runtime::Runtime;
struct Route;
async fn some_async_task() -> i32 {
println!("Starting the task...");
// 模拟异步操作
tokio::time::sleep(std::time::Duration::from_secs(2)).await;
println!("Task completed!");
0
}
#[tokio::main]
async fn main() {
let server: Server = Server::new().await;
server.route::<Route>("/", move |ctx: Context| {
some_async_task().await;
});
server.listen();
}异步闭包捕获外部变量
使用 async move
struct Route;
let test_string: String = "test".to_owned();
server.route::<Route>("/test/async", move |_| {
let tmp_test_string = test_string.clone();
async move {
println!("{:?}", tmp_test_string);
}
}).await;使用 future_fn!
struct Route;
let test_string: String = "test".to_owned();
let func = future_fn!(test_string, |_| {
println!("async_move => {:?}", test_string);
});
server.route::<Route>("/test/async", func).await;