genhttp-kt-netty
Experimental · Kotlin · engine: netty · standard configuration · completeness 4/4
Kotlin port of the GenHTTP web server on JDK 25, running on its Netty engine (the counterpart of GenHTTP's ioxide engine): one Netty event loop per core on the native epoll transport, every connection served by a coroutine on the loop that accepted it, TLS through OpenSSL (netty-tcnative). Implemented with web services and a layout router, JSON via Jackson, Postgres via HikariCP and JDBC on a dispatcher beside the event loops.
- Official repository
- Official website
- Benchmark implementation
- All Kotlin entries, compared
- Open the leaderboard
Achievements
🥈 2 Silver · 🥉 1 Bronze. Top three of a field, taken in this entry's own league: the family composite, the same composite among entries written in the same language, and each test profile it is scored on. Every field is the one the badges publish, so a medal and a badge always say the same thing. How medals are awarded.
| Medal | Award | Field | Rank |
|---|---|---|---|
| 🥈 Silver | Within its language | Kotlin · HTTP/1.1 | 2 of 3 |
| 🥈 Silver | Test profile | Efficiency · Latency-1M | 2 of 17 |
| 🥉 Bronze | Test profile | Workload · 8Gbit | 3 of 17 |
Composite rank
Each profile of a family is worth 100 to the entry that leads it, and the composite is the sum over the family, less 2.5% for each of routing, middleware, request and response the entry does not do for you - its completeness factor, which the WebSocket and gRPC families do not carry. The field is this entry's own league: engines and reverse proxies are scored apart from frameworks. How it works.
| Family | Rank | Composite |
|---|---|---|
| HTTP/1.1 | 10 of 19 | 5539 |
| WebSocket | 9 of 14 | 2162 |
Every result
Alpha Round, 21 runs. Requests per second is the best of three; latency, CPU and memory come from that run.
| Category | Profile | Conns | Req/sec | Avg | p99 | CPU | Memory |
|---|---|---|---|---|---|---|---|
| Connection | Baseline | 4,096 | 2,800,322 | 1.46ms | 4.43ms | 6143.4% | 2.0GiB |
| Connection | Pipelined | 4,096 | 18,024,745 | 3.65ms | 7.85ms | 6537.3% | 2.6GiB |
| Connection | Short-lived | 4,096 | 2,144,029 | 1.89ms | 28.90ms | 6161.1% | 2.8GiB |
| Concurrency | Async Delay | 32,000 | 2,065,945 | 15.39ms | 25.90ms | 6282.5% | 3.8GiB |
| Efficiency | Latency-10K | 1,024 | 9,982 | 77.3us | 111.0us | 35.0% | 364MiB |
| Efficiency | Latency-1M | 1,024 | 997,974 | 109.7us | 203.0us | 2768.0% | 978MiB |
| Efficiency | Latency-500K/8 | 1,024 | 438,490 | 1185836.3us | 3900416.0us | 796.6% | 855MiB |
| Workload | JSON Comp | 4,096 | 537,946 | 7.48ms | 199.50ms | 6144.2% | 2.5GiB |
| Workload | JSON Comp | 16,384 | 548,106 | 27.77ms | 712.00ms | 6394.4% | 2.6GiB |
| Workload | JSON TLS | 4,096 | 894,319 | 4.62ms | 40.08ms | 6174.9% | 3.3GiB |
| Workload | 8Gbit | 512 | 49,366 | 108.5us | 148.0us | 269.2% | 436MiB |
| Workload | Static TLS | 1,024 | 421,662 | 2.67ms | 25.92ms | 4095.8% | 1.1GiB |
| Database | Async DB | 1,024 | 42,247 | 24.06ms | 77.70ms | 5690.0% | 1.4GiB |
| WebSocket | Echo | 512 | 3,476,888 | 146us | 363us | 6486.6% | 1.2GiB |
| WebSocket | Echo | 4,096 | 3,478,738 | 1.17ms | 2.59ms | 6505.2% | 1.9GiB |
| WebSocket | Echo | 16,384 | 2,985,178 | 5.33ms | 11.60ms | 6161.9% | 3.4GiB |
| WebSocket | Echo Pipelined | 512 | 45,326,675 | 180us | 464us | 6179.4% | 4.1GiB |
| WebSocket | Echo Pipelined | 4,096 | 44,861,456 | 1.46ms | 4.70ms | 5977.3% | 6.7GiB |
| WebSocket | Echo Pipelined | 16,384 | 34,989,456 | 7.29ms | 24.10ms | 5906.7% | 10.3GiB |
| WebSocket | Echo Short-lived | 512 | 1,667,945 | 187us | 641us | 6293.5% | 2.2GiB |
| WebSocket | Echo Short-lived | 4,096 | 1,788,771 | 419us | 1.99ms | 6290.7% | 3.7GiB |
Compared with
The Kotlin entries around genhttp-kt-netty on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs genhttp-kt-netty | |
|---|---|---|---|
| ktron | 7557 | +36% | head to head |
| edixoi-kt | 6803 | +23% | head to head |
| kron | 6443 | +16% | head to head |
| ktor-tuned | 3879 | -30% | head to head |
| genhttp-kt | 3783 | -32% | head to head |
Compare genhttp-kt-netty with any Kotlin entry · Compare genhttp-kt-netty with any entry, in any language · Every Kotlin entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry