#http #server #may

may_minihttp

Mini http server that implemented on top of may

10 releases

new 0.1.9 Jul 25, 2024
0.1.8 Jul 6, 2024
0.1.7 Jun 29, 2024
0.1.4 May 30, 2024
0.1.0 Feb 21, 2024

#155 in HTTP server

Download history 31/week @ 2024-03-28 156/week @ 2024-04-04 47/week @ 2024-04-11 6/week @ 2024-04-18 147/week @ 2024-04-25 19/week @ 2024-05-02 142/week @ 2024-05-09 38/week @ 2024-05-16 33/week @ 2024-05-23 177/week @ 2024-05-30 20/week @ 2024-06-06 127/week @ 2024-06-13 61/week @ 2024-06-20 277/week @ 2024-06-27 148/week @ 2024-07-04 19/week @ 2024-07-11

623 downloads per month

MIT/Apache

26KB
494 lines

may_minihttp

Mini http server that implemented on top of may

This crate is ported from tokio_minihttp. But with much ease of use, you can call MAY block APIs directly in your service.

Build Status Crate

Usage

First, add this to your Cargo.toml:

[dependencies]
may_minihttp = "0.1"

Then just simply implement your http service

extern crate may_minihttp;

use std::io;
use may_minihttp::{HttpServer, HttpService, Request, Response};

#[derive(Clone)]
struct HelloWorld;

impl HttpService for HelloWorld {
    fn call(&mut self, _req: Request, res: &mut Response) -> io::Result<()> {
        res.body("Hello, world!");
        Ok(())
    }
}

// Start the server in `main`.
fn main() {
    let server = HttpServer(HelloWorld).start("0.0.0.0:8080").unwrap();
    server.join().unwrap();
}

Performance

Tested with only one working thread on my laptop

Both with the following command to start the server.

$ cargo run --example=hello-world --release

tokio_minihttp

$ wrk http://127.0.0.1:8080 -d 10 -t 1 -c 200
Running 10s test @ http://127.0.0.1:8080
  1 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.98ms  284.06us  12.53ms   98.92%
    Req/Sec   101.64k     1.76k  103.69k    91.00%
  1011679 requests in 10.05s, 99.38MB read
Requests/sec: 100650.94
Transfer/sec:      9.89MB

may_minihttp

$ wrk http://127.0.0.1:8080 -d 10 -t 1 -c 200
Running 10s test @ http://127.0.0.1:8080
  1 threads and 200 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.70ms  812.42us  20.17ms   97.94%
    Req/Sec   117.65k     7.52k  123.40k    88.00%
  1171118 requests in 10.08s, 115.04MB read
Requests/sec: 116181.73
Transfer/sec:     11.41MB

Benchmarks

One of the fastest web frameworks available according to the TechEmpower Framework Benchmark.

License

This project is licensed under either of

at your option.

Dependencies

~3–29MB
~433K SLoC