#async-http #async #web #server-framework #http-framework #framework

amiya

基于中间件的最小化实验性异步HTTP服务器框架

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日

#1204HTTP服务器

每月21次下载

BSD-3-Clause-Clear

59KB
748

Amiya

Badge with github icon Badge with document icon

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-executorasync-io提供动力的多线程异步执行器,http服务器将在其中运行。因此,Amiya::listen只是一个正常的不阻塞线程的非异步方法。

示例

要运行示例,请运行

cargo run --example # show example list
cargo run --example hello # run hello

Amiya框架的最高级文档包含该框架中使用的概念简短描述,建议您先阅读,然后查看那些示例以获得更直观的理解

大多数示例都将使用内置执行器,有关如何使用Amiya自定义执行器的示例,请参阅example/tokio_executor.rs

许可证

BSD 3-Clause Clear许可证,请参阅LICENSE

依赖项

~8–21MB
~284K SLoC