在当今高并发、低延时的 Web 服务开发中,高性能、轻量级的 HTTP 服务器成为关键竞争力。Hyperlane 框架 基于 Rust 开发,充分利用 Rust 的内存安全和高效运行时,提供了灵活、易扩展且性能卓越的 HTTP 服务器解决方案。无论是构建 API 网关、实时通信服务还是 WebSocket 应用,Hyperlane 都能轻松满足您的需求。
框架优势
- 极致性能:在各项压测中,无论是 TCP 连接失败、keep-alive 模式下还是关闭 keep-alive 状态下,Hyperlane 框架都表现出优异的响应速度与高 QPS,足以支撑千万级请求的场景。
- 简洁易用:框架设计理念聚焦于简化开发流程,从请求解析、响应构建到中间件扩展,均采用面向对象和函数式编程风格,代码简洁且易于维护。
- 丰富功能:不仅支持 HTTP 请求解析与响应构建,还内置了 WebSocket 与 SSE 的支持,为实时通信提供全方位解决方案。
- 开源共建:项目在 GitHub 上开源,拥有详尽的 API 文档和示例代码,鼓励开发者参与贡献,共同打造更优秀的 HTTP 服务生态。
高质量代码示例
下面是一个使用 Hyperlane 框架构建简单 HTTP 服务器的示例代码,代码中展示了中间件处理、路由设置以及错误调试等常见功能。请注意,代码内容保持原样,禁止随意修改。
use hyperlane::*;
// request_middleware: 请求中间件,用于在请求处理前设置响应头
async fn request_middleware(controller_data: ControllerData) {
// 获取客户端的 socket 地址(或默认字符串)
let socket_addr: String = controller_data.get_socket_addr_or_default_string().await;
controller_data
// 设置响应头 SERVER,值为 HYPERLANE
.set_response_header(SERVER, HYPERLANE)
.await
// 设置响应头 CONNECTION,值为 CONNECTION_KEEP_ALIVE
.set_response_header(CONNECTION, CONNECTION_KEEP_ALIVE)
.await
// 设置响应头 CONTENT_TYPE,值为 text/plain 编码 UTF8
.set_response_header(CONTENT_TYPE, content_type_charset(TEXT_PLAIN, UTF8))
.await
// 设置响应头 DATE,值为当前 GMT 日期
.set_response_header(DATE, current_date_gmt())
.await
// 设置自定义响应头 "SocketAddr",值为获取到的 socket 地址
.set_response_header("SocketAddr", socket_addr)
.await;
}
// response_middleware: 响应中间件,用于在响应发送后记录日志
async fn response_middleware(controller_data: ControllerData) {
// 发送响应
let _ = controller_data.send().await;
// 获取请求和响应的字符串信息
let request: String = controller_data.get_request_string().await;
let response: String = controller_data.get_response_string().await;
controller_data
// 记录请求日志
.log_info(&request, log_handler)
.await
// 记录响应日志
.log_info(&response, log_handler)
.await;
}
// root_route: 根路由,返回简单的欢迎信息
async fn root_route(controller_data: ControllerData) {
controller_data
// 设置 HTTP 状态码为 200
.set_response_status_code(200)
.await
// 设置响应体为 "Hello hyperlane => /"
.set_response_body("Hello hyperlane => /")
.await;
}
// websocket_route: WebSocket 路由,将请求体原样返回
async fn websocket_route(controller_data: ControllerData) {
// 获取请求体字节数组
let request_body: Vec<u8> = controller_data.get_request_body().await;
// 将请求体作为响应体发送回去
let _ = controller_data.send_response_body(request_body).await;
}
#[tokio::main]
async fn main() {
// 创建一个新的 Server 实例
let server: Server = Server::new();
// 设置服务器监听地址
server.host("0.0.0.0").await;
// 设置服务器端口为 60000
server.port(60000).await;
// 设置日志存放目录
server.log_dir("./logs").await;
// 启用内部日志记录功能
server.enable_inner_log().await;
// 启用内部打印功能
server.enable_inner_print().await;
// 设置日志文件大小上限
server.log_size(100_024_000).await;
// 设置 HTTP 行缓冲区大小
server.http_line_buffer_size(4096).await;
// 设置 WebSocket 缓冲区大小
server.websocket_buffer_size(4096).await;
// 注册请求中间件
server.request_middleware(request_middleware).await;
// 注册响应中间件
server.response_middleware(response_middleware).await;
// 注册根路由
server.route("/", root_route).await;
// 注册 WebSocket 路由
server.route("/websocket", websocket_route).await;
// 定义一个测试字符串用于 panic 场景
let test_string: String = "Hello hyperlane".to_owned();
server
.route(
"/test/panic",
async_func!(test_string, |controller_data| {
// 打印测试字符串(成功提示)
println_success!(test_string);
// 打印请求内容
println_success!(controller_data.get_request().await.get_string());
// 故意触发 panic 用于测试错误捕获
panic!("Test panic\ndata: test");
}),
)
.await;
// 启动服务器监听
server.listen().await;
}
逐行代码解释
-
use hyperlane:😗;
引入 Hyperlane 框架所有公共接口,方便后续使用。
-
request_middleware 函数
该异步函数在每次请求到达时调用,用于在响应返回前设置多个 HTTP 头信息,如服务器名称、连接方式、内容类型、日期和客户端地址。
controller_data.get_socket_addr_or_default_string().await:异步获取客户端的 socket 地址或默认字符串。- 连续调用
set_response_header方法依次设置各个响应头,并在每次调用后等待操作完成。
-
response_middleware 函数
在响应发送后,该中间件负责将请求与响应信息记录到日志中。
- 首先调用
send()方法发送响应,然后分别获取请求和响应字符串,通过log_info方法记录日志信息。
- 首先调用
-
root_route 函数
定义根路由(“/”)的处理逻辑,设置 HTTP 状态码为 200 并返回固定字符串作为响应体。
-
websocket_route 函数
用于处理 WebSocket 请求,将收到的请求体字节数组原样返回给客户端,展示 WebSocket 通信的基本处理流程。
-
main 函数
主函数中创建服务器实例并进行一系列配置:
- 设置监听地址、端口以及日志目录;
- 启用内部日志与打印,配置缓冲区大小;
- 注册请求和响应中间件、设置多个路由(包括根路由、WebSocket 路由以及一个用于测试 panic 的路由);
- 最后调用
listen()启动服务器进入监听状态。
性能与环境优势
在多种压测场景下,Hyperlane 框架均展现出极高的 QPS 与低延迟,远超传统的 Rust 标准库和其他流行框架。尤其在启用 keep-alive 的场景中,其 QPS 达到 30w+,在高并发请求下依旧稳定可靠。同时,框架运行于 Ubuntu20.04 LTS 系统,配合高端硬件(如 i9-14900KF CPU、192GB 内存和高性能固态硬盘),展现了优异的吞吐量和系统调优能力。
开始使用
安装 Hyperlane 非常简单,只需使用 Cargo 添加依赖即可:
cargo add hyperlane
更多使用示例和快速上手指南,请参见以下资源:
Hyperlane 框架将为您提供一个稳定、高效、易扩展的 HTTP 服务平台,是构建高性能 Web 服务的理想选择。赶快加入开源社区,共同探索更广阔的开发未来!
如有任何疑问或建议,欢迎通过邮件联系作者:ltpp-universe root@ltpp.vip 或在 GitHub 上提交 issue。
914

被折叠的 条评论
为什么被折叠?



