true-async-server
Emerging · PHP · tuned configuration · completeness 2/4
Native PHP HTTP server built on the TrueAsync coroutine engine. Each connection runs as a cooperative coroutine; one OS thread per CPU listens via SO_REUSEPORT inside a single PHP process. PDO connection pool, OPcache JIT, no Caddy / FrankenPHP / FastCGI in front.
Achievements
🥇 3 Gold · 🥈 1 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 |
|---|---|---|---|
| 🥇 Gold | Within its language | PHP · HTTP/1.1 | 1 of 5 |
| 🥇 Gold | Within its language | PHP · HTTP/2 | 1 of 4 |
| 🥇 Gold | Test profile | HTTP/2 · Static | 1 of 27 |
| 🥈 Silver | Test profile | Efficiency · Latency-10K | 2 of 94 |
| 🥉 Bronze | Family composite | Composite · HTTP/2 | 3 of 29 |
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 94 | 5288 |
| HTTP/2 | 3 of 29 | 2530 |
Every result
Alpha Round, 22 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,260,254 | 1.81ms | 2.53ms | 5871.2% | 220MiB |
| Connection | Pipelined | 4,096 | 2,295,056 | 28.56ms | 48.20ms | 5949.5% | 245MiB |
| Connection | Short-lived | 4,096 | 1,798,930 | 2.26ms | 33.70ms | 6213.4% | 165MiB |
| Concurrency | Async Delay | 32,000 | 906,437 | 35.04ms | 55.10ms | 2894.5% | 2.2GiB |
| Efficiency | Latency-10K | 1,024 | 9,983 | 79.9us | 120.0us | 36.0% | 179MiB |
| Efficiency | Latency-1M | 1,024 | 997,421 | 169.6us | 376.0us | 4286.3% | 194MiB |
| Efficiency | Latency-500K/8 | 1,024 | 304,676 | 3804930.4us | 9515008.0us | 769.0% | 98MiB |
| Workload | JSON Comp | 4,096 | 458,109 | 8.95ms | 20.20ms | 6227.8% | 254MiB |
| Workload | JSON Comp | 16,384 | 440,487 | 36.93ms | 66.30ms | 6499.7% | 487MiB |
| Workload | JSON TLS | 4,096 | 782,380 | 5.35ms | - | 6236.9% | 627MiB |
| Workload | 8Gbit | 512 | 49,363 | 108.6us | 148.0us | 324.1% | 260MiB |
| Database | Async DB | 1,024 | 249,894 | 3.56ms | 12.50ms | 4917.3% | 248MiB |
| Database | Fortunes | 1,024 | 88,584 | 7.68ms | 28.80ms | 6331.0% | 224MiB |
| HTTP/2 | Baseline | 256 | 4,969,431 | 5.40ms | - | 7904.6% | 225MiB |
| HTTP/2 | Baseline | 1,024 | 3,288,741 | 27.37ms | - | 7207.5% | 505MiB |
| HTTP/2 | Static | 256 | 1,035,118 | 8.26ms | - | 6423.3% | 559MiB |
| HTTP/2 | Static | 1,024 | 830,382 | 37.40ms | - | 6562.3% | 2.3GiB |
| HTTP/2 | Baseline (h2c) | 256 | 6,038,026 | 4.37ms | - | 7082.3% | 244MiB |
| HTTP/2 | Baseline (h2c) | 1,024 | 3,991,541 | 23.14ms | - | 7607.8% | 528MiB |
| HTTP/2 | Baseline (h2c) | 4,096 | 3,753,829 | 100.43ms | - | 7497.4% | 1.5GiB |
| HTTP/2 | JSON (h2c) | 1,024 | 1,232,194 | 25.75ms | - | 7366.1% | 319MiB |
| HTTP/2 | JSON (h2c) | 4,096 | 1,217,112 | 102.11ms | - | 7258.8% | 781MiB |
Compared with
The PHP entries around true-async-server on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs true-async-server | |
|---|---|---|---|
| swoole | 5037 | -5% | head to head |
| hyperf | 1777 | -66% | head to head |
Compare true-async-server with any PHP entry · Compare true-async-server with any entry, in any language · Every PHP entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry