# Hyperlane:新一代高性能 Rust 框架的实战体验
## 性能亮点:令人惊艳的压测数据
Hyperlane 作为新一代 Rust Web 框架,其性能表现令人惊艳。以下是我们进行的严格压测结果:
### 高并发持续压力测试
```sh
wrk -c360 -d60s http://127.0.0.1:60000/
```
> [!tip]
> 测试 `360` 并发,持续 `60s` 请求。`QPS` 结果如下:
>
> - 1 `Tokio` :340130.92
> - 2 `Hyperlane框架` :324323.71
> - 3 `Rocket框架` :298945.31
> - 4 `Rust标准库` :291218.96
> - 5 `Gin框架` :242570.16
> - 6 `Go标准库` :234178.93
> - 7 `Node标准库` :139412.13
### 百万请求高并发测试
```sh
ab -n 1000000 -c 1000 -r -k http://127.0.0.1:60000/
```
> [!tip]
> 测试 `1000` 并发,一共 `100w` 请求。`QPS` 结果如下:
>
> - 1 `Tokio` :308596.26
> - 2 `Hyperlane框架` :307568.90
> - 3 `Rocket框架` :267931.52
> - 4 `Rust标准库` :260514.56
> - 5 `Go标准库` :226550.34
> - 6 `Gin框架` :224296.16
> - 7 `Node标准库` :85357.18
从数据可以看出,Hyperlane 框架的性能几乎接近底层 Tokio 运行时,远超其他主流框架,是构建高性能 Web 服务的理想选择。
## 完整使用示例
```rust
use hyperlane::*;
async fn request_middleware(ctx: Context) {
let socket_addr: String = ctx.get_socket_addr_or_default_string().await;
ctx.set_response_header(SERVER, HYPERLANE)
.await
.set_response_header(CONNECTION, KEEP_ALIVE)
.await
.set_response_header(CONTENT_TYPE, TEXT_PLAIN)
.await
.set_response_header("SocketAddr", socket_addr)
.await;
}
async fn response_middleware(ctx: Context) {
let _ = ctx.send().await;
}
#[methods(get, post)]
async fn root_route(ctx: Context) {
ctx.set_response_status_code(200)
.await
.set_response_body("Hello hyperlane => /")
.await;
}
#[get]
async fn ws_route(ctx: Context) {
let key: String = ctx.get_request_header(SEC_WEBSOCKET_KEY).await.unwrap();
let request_body: Vec = ctx.get_request_body().await;
let _ = ctx.set_response_body(key).await.send_body().await;
let _ = ctx.set_response_body(request_body).await.send_body().await;
}
#[post]
async fn sse_route(ctx: Context) {
let _ = ctx
.set_response_header(CONTENT_TYPE, TEXT_EVENT_STREAM)
.await
.set_response_status_code(200)
.await
.send()
.await;
for i in 0..10 {
let _ = ctx
.set_response_body(format!("data:{}{}", i, HTTP_DOUBLE_BR))
.await
.send_body()
.await;
}
let _ = ctx.closed().await;
}
async fn dynamic_route(ctx: Context) {
let param: RouteParams = ctx.get_route_params().await;
panic!("Test panic {:?}", param);
}
async fn on_ws_connected(ctx: Context) {
let _ = ctx.set_response_body("connected").await.send_body().await;
}
fn error_handler(error: String) {
eprintln!("{}", error);
let _ = std::io::Write::flush(&mut std::io::stderr());
}
async fn main() {
let server: Server = Server::new();
server.host("0.0.0.0").await;
server.port(60000).await;
server.enable_nodelay().await;
server.disable_linger().await;
server.http_line_buffer_size(4096).await;
server.ws_buffer_size(4096).await;
server.error_handler(error_handler).await;
server.on_ws_connected(on_ws_connected).await;
server.before_ws_upgrade(request_middleware).await;
server.request_middleware(request_middleware).await;
server.response_middleware(response_middleware).await;
server.route("/", root_route).await;
server.route("/ws", ws_route).await;
server.route("/sse", sse_route).await;
server.route("/dynamic/{routing}", dynamic_route).await;
server
.route("/dynamic/routing/{file:^.*$}", dynamic_route)
.await;
server.run().await.unwrap();
}
```
## 开始使用 Hyperlane
### 安装
```sh
cargo add hyperlane
```
### 快速开始
```sh
git clone https://github.com/eastspire/hyperlane-quick-start.git
cd hyperlane-quick-start
cargo run
```
---
**了解更多**
如果你对 Hyperlane 感兴趣,欢迎访问 [GitHub 仓库](https://github.com/eastspire/hyperlane) 获取最新信息,或查看 [官方文档](https://docs.ltpp.vip/hyperlane/quick-start/) 了解详细使用指南。有任何问题或建议,也欢迎通过 [root@ltpp.vip](mailto:root@ltpp.vip) 与作者交流。
新一代 Rust Web 框架的高性能之选(1750039019300200)
最新推荐文章于 2025-08-04 21:32:54 发布