异步运行时
2025年8月17日小于 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+
的提升
框架本身异步使用
server.route("/", move |_| async move {
println!("hello");
}).await;
下面是使用 tokio
库的异步运行时示例代码
v4.0.0 之后版本的示例代码
use hyperlane::*;
use runtime::Runtime;
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("/", move |ctx: Context| {
some_async_task().await;
});
server.listen();
}
异步闭包捕获外部变量
使用 async move
let test_string: String = "test".to_owned();
server.route("/test/async", move |_| {
let tmp_test_string = test_string.clone();
async move {
println!("{:?}", tmp_test_string);
}
}).await;
使用 future_fn!
let test_string: String = "test".to_owned();
let func = future_fn!(test_string, |_| {
println!("async_move => {:?}", test_string);
});
server.route("/test/async", func).await;