6个版本
0.0.6 | 2021年3月27日 |
---|---|
0.0.5 | 2021年3月27日 |
0.0.4 | 2020年9月25日 |
0.0.2 | 2020年8月11日 |
0.0.1 | 2020年7月20日 |
#1204 在 HTTP服务器
每月21次下载
59KB
748 行
Amiya
Amiya是一个基于中间件的最小化实验性异步HTTP服务器框架,构建在smol-rs
相关的异步组件之上。
目前仍在开发中,处于非常早期的alpha阶段。
API设计可能会变化,请勿在任何情况下使用它,除非是测试或学习!
目标
本项目的目标是尝试构建一个(按重要性排序)
- 安全,使用
#![forbid(unsafe_code)]
- 异步
- 基于中间件
- 最小化
- 易于使用
- 易于扩展
为我写简单的Web服务而设计的HTTP框架。
Amiya使用async-h1
来解析和处理请求,因此目前只支持HTTP版本1.1。HTTP 1.0或2.0目前不在目标列表中,至少在近期内不会。
性能也不在列表中,毕竟,Amiya目前只是一个实验,它使用了大量的堆分配(Box)和动态分派(Trait Object),因此与直接使用async-h1
相比,可能会有一些性能损失。
试试看
为了启动一个非常简单的HTTP服务,该服务在所有路径上向客户端返回Hello World
use amiya::m;
fn main() {
let app = amiya::new().uses(m!(ctx =>
ctx.resp.set_body(format!("Hello World from: {}", ctx.path()));
));
app.listen("[::]:8080").unwrap();
// ... do other things you want ...
// ... Amiya server will not block your thread ...
}
Amiya内置了由async-executor
和async-io
提供动力的多线程异步执行器,http服务器将在其中运行。因此,Amiya::listen
只是一个正常的不阻塞线程的非异步方法。
示例
要运行示例,请运行
cargo run --example # show example list
cargo run --example hello # run hello
Amiya框架的最高级文档包含该框架中使用的概念简短描述,建议您先阅读,然后查看那些示例以获得更直观的理解
- 了解Amiya中间件系统的洋葱模型:
examples/middleware.rs
- 使用自定义类型作为中间件:
examples/measurer.rs
- 在上下文中存储额外数据:
examples/extra.rs
- 使用
Router
中间件进行请求重定向:examples/router.rs
- 将查询字符串解析为json值或自定义结构体:
examples/query.rs
- 将表单编码的body解析为json值或自定义结构体:
examples/urlencoded.rs
- 将路径的一部分匹配为参数:
examples/arg.rs
- 将另一个Amiya应用作为中间件使用:
examples/subapp.rs
- 使用
listen
返回的信号发送器停止Amiya服务器:examples/stop.rs
大多数示例都将使用内置执行器,有关如何使用Amiya自定义执行器的示例,请参阅example/tokio_executor.rs
。
许可证
BSD 3-Clause Clear许可证,请参阅LICENSE
。
依赖项
~8–21MB
~284K SLoC