#applications #thread

ehttpd

A thread-based HTTP server library, which can be used to create custom HTTP server applications

19 unstable releases (8 breaking)

0.9.0 Oct 6, 2024
0.8.2 Jun 16, 2024
0.8.1 Jan 28, 2024
0.6.2 Nov 25, 2023
0.4.3 Mar 20, 2023

#136 in HTTP server

Download history 2/week @ 2024-07-15 5/week @ 2024-07-22 10/week @ 2024-07-29 4/week @ 2024-08-05 3/week @ 2024-08-12 4/week @ 2024-08-19 2/week @ 2024-08-26 12/week @ 2024-09-09 47/week @ 2024-09-16 59/week @ 2024-09-23 170/week @ 2024-09-30 117/week @ 2024-10-07 50/week @ 2024-10-14 23/week @ 2024-10-21 35/week @ 2024-10-28

337 downloads per month
Used in 2 crates

BSD-2-Clause OR MIT

52KB
1K SLoC

License BSD-2-Clause License MIT AppVeyor CI docs.rs crates.io Download numbers dependency status

ehttpd

Welcome to ehttpd 🎉

ehttpd is a HTTP server library, which can be used to create custom HTTP server applications. It also offers an optional built-in threadpool-based server for simple applications (feature: server, disabled by default).

Threadpool-based server

The rationale behind the thread-based approach is that it is much easier to implement than async/await, subsequently requires less code, and is – in theory – less error prone.

Furthermore, it also simplifies application development since the developer cannot accidentally stall the entire runtime with a single blocking call; being managed by the OS-scheduler, threads offer much stronger concurrency isolation guarantees (which can even be niced or tweaked in most environments if desired).

Note that, starting with version 0.9, the built-in server is an optional feature and needs to be enabled using the server feature.

Performance

While the thread-based approach is not the most efficient out there, it's not that bad either. Some wrk benchmarks:

MacBook Pro (M1 Pro, helloworld, v0.7.1)

$ wrk -t 64 -c 64 http://localhost:9999/testolope
Running 10s test @ http://localhost:9999/testolope
  64 threads and 64 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.00ms  520.00us  27.29ms   95.96%
    Req/Sec     1.02k   262.37     6.00k    94.81%
  654074 requests in 10.10s, 32.44MB read
Requests/sec:  64756.19
Transfer/sec:      3.21MB

Old Linux Machine (Intel(R) Core(TM) i5-2500K CPU @ 3.30GHz, helloworld-nokeepalive, v0.7.0)

$ wrk -t 64 -c 64 http://localhost:9999/testolope
Running 10s test @ http://localhost:9999/testolope
  64 threads and 64 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     2.22ms    1.00ms  60.93ms   95.30%
    Req/Sec   435.19     56.94     1.00k    85.05%
  278046 requests in 10.10s, 18.83MB read
Requests/sec:  27528.42
Transfer/sec:      1.86MB

Dependencies

~42KB