| Crates.io | ehttpd |
| lib.rs | ehttpd |
| version | 0.9.0 |
| created_at | 2023-01-28 23:05:11.949648+00 |
| updated_at | 2024-10-06 18:31:33.42296+00 |
| description | A thread-based HTTP server library, which can be used to create custom HTTP server applications |
| homepage | |
| repository | https://github.com/KizzyCode/ehttpd-rust |
| max_upload_size | |
| id | 770628 |
| size | 62,934 |
ehttpdWelcome 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).
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.
While the thread-based approach is not the most efficient out there, it's not that bad either. Some wrk benchmarks:
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
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