4个版本
0.1.3 | 2024年1月25日 |
---|---|
0.1.2 | 2024年1月25日 |
0.1.1 | 2024年1月24日 |
0.1.0 | 2024年1月23日 |
#86 在 HTTP服务器
每月31次下载
8MB
2.5K SLoC
Kanagawa
使用主动IO提供Web服务
Kanagawa是Tide Web框架的分支。它更注重性能而非便利性。
入门
要使用Rust构建Web应用,你需要一个HTTP服务器和一个异步运行时。运行 cargo init
后,将以下行添加到你的 Cargo.toml
文件中
# Example, use the version numbers you need
kanagawa = "0.1"
示例
创建一个接收JSON正文、验证它并以确认消息响应的HTTP服务器。
use kanagawa::Request;
use kanagawa::prelude::*;
#[derive(Debug, Deserialize)]
struct Animal {
name: String,
legs: u16,
}
async fn server() -> kanagawa::Result<()> {
let mut app = kanagawa::new();
app.at("/orders/shoes").post(order_shoes);
app.listen("127.0.0.1:8080").await?;
Ok(())
}
async fn order_shoes(mut req: Request<()>) -> kanagawa::Result {
let Animal { name, legs } = req.body_json().await?;
Ok(format!("Hello, {}! I've put in an order for {} shoes", name, legs).into())
}
fn main() -> Result<()> {
block_on(server())
}
$ curl localhost:8080/orders/shoes -d '{ "name": "Chashu", "legs": 4 }'
Hello, Chashu! I've put in an order for 4 shoes
$ curl localhost:8080/orders/shoes -d '{ "name": "Mary Millipede", "legs": 750 }'
Hello, Mary Millipede! I've put in an order for 750 shoes
更多示例请参阅 示例目录。
基准测试
基准测试于
- Intel(R) Xeon(R) W-2295 CPU @ 3.00GHz,单NUMA节点,18核心。
- 200 GB RAM
- 禁用管理员。
- 禁用频率缩放。
- 禁用intel pstate turbo。
运行你自己的基准测试。
Kanagawa (sha: 12723d8)
plain time: [1.1975 µs 1.1993 µs 1.2013 µs]
nested time: [1.2742 µs 1.2784 µs 1.2828 µs]
route-match time: [1.2299 µs 1.2336 µs 1.2384 µs]
route-root time: [1.2279 µs 1.2316 µs 1.2358 µs]
Tide (sha: b32f680)
plain time: [1.7027 µs 1.7035 µs 1.7049 µs]
nested time: [1.6998 µs 1.7005 µs 1.7014 µs]
route-match time: [1.7031 µs 1.7036 µs 1.7042 µs]
route-root time: [1.7021 µs 1.7030 µs 1.7041 µs]
社区资源
要添加此列表中的链接,请编辑Markdown文件并提交拉取请求(需要GitHub登录)
请在此列出。
贡献
想要加入我们?查看我们的指南中的“贡献”部分并查看一些这些问题
行为准则
神奈川项目遵循贡献者守则。这描述了所有贡献者应遵守的最小行为标准。
许可协议
根据以下任一协议许可:
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据 Apache-2.0 许可协议定义,您有意提交以包含在该作品中的任何贡献,将按照上述双重许可,不附加任何额外条款或条件。
依赖项
~14–26MB
~423K SLoC