4个版本

使用旧的Rust 2015

0.0.4 2017年11月13日
0.0.3 2017年10月12日
0.0.2 2017年10月6日
0.0.1 2017年10月2日

#619 in #web-framework

MIT/Apache

13KB
187

zap

GitHub issues GitHub stars Crates.io Crates.io

zap的使命是提供一个基本但快速的Rust Web框架。

文档

关于

此代码基于tokio的minihttp项目,所以特别感谢他们。 (来源)

如何使用

将以下内容添加到您的Cargo.toml

[dependencies]
zap = "0.0.4"

速度

所以zap不仅速度快,比基于hyperiron快2.96倍,以下是基准测试结果

基准测试代码

Iron

此代码取自ironframework.io网页。

extern crate iron;

use iron::prelude::*;
use iron::status;

fn main() {
    fn hello_world(_: &mut Request) -> IronResult<Response> {
        Ok(Response::with((status::Ok, "Hello World!")))
    }

    Iron::new(hello_world).http("localhost:3000").unwrap();
}

Zap

可以通过以下方式运行此示例

$ git clone https://github.com/oldaniel/zap && cd zap
$ cargo run --example hello-world --release
extern crate zap;

use std::io::Error as ZapError;
use zap::prelude::*;

struct HelloWorld;

impl Handler for HelloWorld {
    type Request = Request;
    type Response = Response;
    type Error = ZapError;
    type Future = ZapResult;

    fn call(&self, _: Request) -> ZapResult {
        let mut resp = Response::new();

        resp.body("Hello World!");

        resp.ok()
    }
}

fn main() {
    let addr = "0.0.0.0:8080".parse().unwrap();
    let mut server = Server::new(Http, addr);
    server.threads(8);
    server.serve(|| Ok(HelloWorld));
}

基准测试结果

使用以下命令计算了基准测试结果:wrk -t16 -c500 -d10s http://127.0.0.1:8080 --latency

服务器技术细节

  • Intel Core I7-6700K,超线程
  • 16GB RAM,2400MHZ

详细结果:[在wiki中](https://github.com/oldaniel/zap/wiki/Benchmarks)

Iron

[...]
Requests/sec: 307581.17
Transfer/sec:     33.44MB

Zap

[...]
Requests/sec: 912832.31
Transfer/sec:     40.90MB

待办事项

我们还需要做一些事情

  • 让它更快
  • URL和正文解析
  • 请求键存储

致谢与许可证

Daniel Oltmanns发起的项目。其他令人惊叹的贡献者[在此](https://github.com/oldaniel/zap/graphs/contributors)。

GitHub license

依赖项

~6.5MB
~103K SLoC