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日

#86HTTP服务器

每月31次下载

MIT/Apache

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-2.0 许可协议定义,您有意提交以包含在该作品中的任何贡献,将按照上述双重许可,不附加任何额外条款或条件。

依赖项

~14–26MB
~423K SLoC