7个版本
0.3.5 | 2023年9月20日 |
---|---|
0.3.4 | 2023年9月19日 |
0.1.0 | 2023年9月18日 |
#370 在 HTTP服务器 中排名
每月 39 次下载
54KB
1K SLoC
hyper-fast
基于Hyper和Rust的非常快的HTTP Web框架(比actix和其他框架快得多)。
特性
- 支持请求和响应的brotli、deflate和gzip编码
- 内置API的访问日志和度量
- 简单的API获取当前度量 - JSON和Prometheus格式
- 内置OOR(Out of rotation API),可取服务器出轮询
- 内置服务器健康API
- 非常简单且快速的基于匹配模式的路由
- 比actix和其他Web服务器快得多。
- 支持可选的守护进程服务,服务器启动时启动,服务器关闭时停止
- 内置服务器关闭处理
示例
查看examples/example_server.rs
以获取一个工作示例。示例可以用cargo run --example example_server
运行。
- 定义一个服务类,为API路由实现
Service
特质。
pub struct ExampleService {
// any service level properties
}
#[async_trait]
impl Service for ExampleService {
async fn api_handler<'a>(
&'a self,
_: Body,
route: &HttpRoute<'a>,
path: &[&str],
) -> Result<Response<Body>, ApiError> {
match path {
["test"] if matches!(route.method, &http::Method::GET) => {
self.get_test(route).await
}
_ => HttpResponse::not_found(route.path),
}
}
}
impl ExampleService {
pub async fn get_test(&self, route: &HttpRoute<'_>) -> Result<Response<Body>, ApiError> {
HttpResponse::string(route, "GET::/api/test - test passed".to_string())
}
}
- 可选的服务守护进程,可以是空实现 - 如果不需要的话。
pub struct ExampleServiceDaemon {}
#[async_trait]
impl ServiceDaemon<ExampleService> for ExampleServiceDaemon {
async fn start(&self, _service: Arc<ExampleService>) {
//no impl for now.
}
}
- 实现
ServiceBuilder
特质。
pub struct ExampleServiceBuilder {
// any service builder level properties
}
#[async_trait]
impl ServiceBuilder<ExampleService, ExampleServiceDaemon> for ExampleServiceBuilder {
async fn build(self) -> anyhow::Result<(ExampleService, Option<ExampleServiceDaemon>)> {
let service = ExampleService {};
Ok((service, None))
}
}
- 在主方法中调用
start_http_server
。
#[tokio::main(flavor = "multi_thread")]
async fn main() -> Result<(), anyhow::Error> {
load_config("examples/config", "dev")?;
setup_logging("examples/config/log4rs.yml")?;
start_http_server("127.0.0.1:6464", ExampleServiceBuilder {}).await
}
API
/oor
- 切换服务器在轮询中的状态/status
- 提供服务器在轮询中的状态/metrics/json
- JSON格式的度量/metrics/prometheus
- Prometheus格式的度量/api/<你的API路由>
- 所有API路由都在/api
之后
依赖关系
~14–23MB
~460K SLoC