Hi,
as there are two more HTTP server implementations:

* [Serverino](https://forum.dlang.org/thread/bqsatbwjtoobpbzxd...@forum.dlang.org) * [Archttp](https://forum.dlang.org/thread/jckjrgnmgsulewnre...@forum.dlang.org)

It was time to update some numbers!

Last results can be seen [here](https://github.com/tchaloupka/httpbench#multi-core-results) - it's a lot of numbers..

Some notes:

* I've updated all frameworks and compilers to latest versions
* tests has been run on the same host but separated using VMs (for workload generator and servers) with pinned CPUs (so they don't interfere each other) * as I have "only" 16 available threads to be used and in 12 vs 4 CPUs scenario wrk saturated all 12 CPUs, I had to switch it to 14/2 CPUs to give wrk some space
* virtio bridged network between VMs
* `Archttp` have some problem with only 2 CPUs so it's included only in the first test (it was ok with 4 CPUs and was cca 2x faster than `hunt-web`) * `Serverino` is set to use same number of processes as are CPUs (leaving it to default was slower so I kept it set like that)

One may notice some strange `adio-http` it the results. Well, it's a WIP framework (`adio` as an "async dlang I/O"), that is not public (yet). It has some design goals (due to it's targeted usage), that some can prefer and some won't like at all:

* `betterC` - so no GC, no delegates, no classes (D ones), no exceptions, etc. * should be possible later to work with full D too, but it's easier to go from `betterC` to full D than other way around and is not in the focus now
* linux as an only target atm.
* `epoll` and `io_uring` async I/O api backends (can be extended with `IOCP` or `Kqueue`, but linux is main target now) * performance, simplicity, safety in this order (and yes with `betterC` there are many pointers, function callbacks, manual memory management, etc. - thanks for `asan` ldc team ;-)) * middleware support - one can setup router with ie request logger, gzip, auth middlewares easily (REST API middleware would be one of them) * can be used with just callbacks or combined with fibers (http server itself is fibers only as it would be a callback hell otherwise)
* each async operation can be set with timeout to simplify usage

It doesn't use any "hacks" in the benchmark. Just a real HTTP parser, simple path router, real headers writing, real `Date` header, etc. But has tuned parameters (no timeouts set - which others doesn't use too). It'll be released when API settles a bit and real usage with sockets, websockets, http clients, REST API, etc. would be possible.

Reply via email to