2个版本

使用旧的Rust 2015

0.1.1 2018年7月21日
0.1.0 2018年2月21日

#1462 in HTTP服务器

MIT许可证

61KB
654

aitch 构建状态 Crates.io Docs.rs

aitch是一个简单、轻量级的工具包,用于在安全的、稳定的Rust中构建HTTP服务器。

它基于http crate,并提供了表示HTTP处理器、体和中间件类型。它提供了hypertiny_http后端来运行处理器,但旨在与HTTP服务器库无关。

它受到Go的net/http的简单性和(流行度)的启发,该包将应用程序/中间件构建为一系列嵌套的Handler

aitch利用Rust的类型系统来使这些处理器更容易使用,而不会失去它们的简单性。

示例

extern crate aitch;
extern crate http;

use aitch::servers::hyper::Server;
use aitch::{middlewares, Responder, Result};
use http::Request;

fn handler(_: Request<()>, mut resp: http::response::Builder) -> impl Responder {
    resp.body("Hello, world!".to_owned())
}

fn main() -> Result<()> {
    let wrapped = middlewares::with_stdout_logging(handler);

    let addr = "127.0.0.1:3000".parse()?;
    println!("Listening on http://{}", addr);
    Server::new(addr, wrapped)?.run()
}

此示例与aitch一起提供。要运行它,克隆此存储库并运行

cargo run --release --example hello-world-sync

请参阅此存储库的examples/目录中的其他示例

  • json.rs,它使用可选的Json<T>类型来包装结构体,这些结构体在请求/响应体中自动(反)序列化。
  • simple-router.rs,它使用简单的请求路由器,模仿net/http'的ServeMux
  • shared-context.rs,展示了如何使用提供的middlewares::with_context将包含共享资源的结构体注入应用程序的HTTP处理器。
  • examples/static-files.rs,展示了如何使用提供的handlers::static_files::*处理器在开发过程中提供静态资产。

依赖项 & 功能

aitch旨在仅提供构建HTTP应用程序所需的最基本的类型,以您选择的任何服务器技术。它旨在在依赖性和运行时成本上保持轻量级,同时仍然易于使用。

为了正常运行,aitch需要少量依赖项:httpfuturesbytes

为了帮助您快速提高生产力,aitch提供了一些可选功能,这些功能目前默认启用

  • server-hyper:提供一个Server,可以使用hyper网络服务器运行aitch::Handler(示例)
  • server-tiny-http:提供一个Server,可以使用tiny_http网络服务器运行aitch::Handler(示例)
  • json:提供一个Json<T>类型,该类型可以包装任何类型T: serde::Deserialize + serde::Serialize,使其可以在请求和响应中使用:http::Request<Json<T>>/http::Response<Json<T>>(示例)
  • mime_guess:使用mime_guess存储库猜测由包含的handlers::static_files::*处理器返回的响应的MIME类型。

这些功能将在不久的将来被拆分为单独的存储库。

它是否快速?

它相当快!

在对默认的hello-world-sync示例(禁用日志记录到stdout,使用Hyper)进行性能分析时,我们看到了在2015年13英寸MBP上的~130,000 req/s,其中包含12个线程和100个连接。

$ wrk --latency -t12 -c100 -d10s https://127.0.0.1:3000/
Running 10s test @ https://127.0.0.1:3000/
  12 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   837.87us    1.15ms  35.88ms   94.35%
    Req/Sec    11.09k     1.55k   17.44k    75.25%
  Latency Distribution
     50%  630.00us
     75%    1.06ms
     90%    1.61ms
     99%    3.45ms
  1325352 requests in 10.02s, 135.24MB read
Requests/sec: 132296.91
Transfer/sec:     13.50MB

许可证

MIT

依赖项

~1.3–3.5MB
~61K SLoC