Skip to content
⚡️ fast http framework for rust
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
benches
examples
src
.gitignore
.travis.yml
Cargo.toml
LICENSE
Readme.md

Readme.md

zap ⚡️

GitHub issues Travis GitHub stars Crates.io Crates.io

The mission of zap is, to deliver a basic, but fast rust web server library.

Documentation

About

This code is based on tokio's minihttp project, so a big thanks to them. (source)

The goal of this project is, to show how fast Rust can be. It isn't made for huge complex applications, just a test project for benchmark reasons.

How to use

Add the following to your Cargo.toml:

[dependencies]
zap = "0.0.4"

Speed

So zap is not only fast, it is wapping 2.96 times faster than iron, which is based on hyper. Benchmarks below:

Benchmark Code

Iron

This code had been taken from the ironframework.io webpage.

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

This example can be run, by:

$ git clone https://github.com/oltdaniel/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));
}

Benchmark Results

The benchmark results have been computed with this command: wrk -t16 -c500 -d10s http://127.0.0.1:8080 --latency

Technical details about the server:

  • Intel Core I7-6700K, hyper-threaded
  • 16GB RAM, 2400MHZ

Detailed results: in the wiki.

Iron

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

Zap

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

Credits & License

Daniel Oltmanns & others

Basically do what you'd like to.

GitHub license

You can’t perform that action at this time.