fnet-h1
Experimental · Go · engine: fnet · standard configuration
fnet v1.0.0's fhttp HTTP/1.1 server: fnet's epoll event loops find where each request message ends and enqueue it, then the standard library parses it and runs an http.Handler on a task-pool worker, so there is no goroutine per connection. Responses are buffered whole. A request whose body is not buffered (larger than 1MB, chunked, or framed unusually) is handed to an internal net/http server, which closes that connection after the one request. fnet's ReusePort option is on: on Linux every sub-reactor listens on :8080 with a socket of its own, sharing the port through SO_REUSEPORT so the kernel spreads the connections over the loops. A second fhttp.Server on :8081 speaks HTTPS through fnet's ftls (crypto/tls inside the connection callbacks, ALPN http/1.1) for the TLS profiles. Static files are read per request from the mounted directory, serving the pre-compressed .br/.gz siblings when the client accepts them; /async-db and the crud routes use pgx's pool sized from DATABASE_MAX_CONN, with Redis as a cache-aside store for item reads where REDIS_URL is provided.
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 | 13 of 22 | 4585 |
Every result
Alpha Round, 13 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,404,492 | 1.70ms | 8.09ms | 6605.8% | 156MiB |
| Connection | Pipelined | 4,096 | 13,726,828 | 4.77ms | 21.70ms | 6470.2% | 228MiB |
| Connection | Short-lived | 4,096 | 2,010,211 | 2.02ms | 9.10ms | 6363.5% | 301MiB |
| Concurrency | Async Delay | 32,000 | 1,494,896 | 21.21ms | 41.20ms | 5125.4% | 841MiB |
| Efficiency | Latency-10K | 1,024 | 9,981 | 84.5us | 124.0us | 40.7% | 86MiB |
| Efficiency | Latency-1M | 1,024 | 997,258 | 151.4us | 518.0us | 3238.3% | 132MiB |
| Efficiency | Latency-500K/8 | 1,024 | 404,289 | 1896352.2us | 4004864.0us | 755.5% | 33MiB |
| Workload | JSON Comp | 4,096 | 230,866 | 17.56ms | 248.80ms | 5403.3% | 560MiB |
| Workload | JSON Comp | 16,384 | 228,590 | 67.68ms | 701.70ms | 5222.6% | 596MiB |
| Workload | JSON TLS | 4,096 | 457,968 | 29.67ms | 801.33ms | 5031.3% | 275MiB |
| Workload | 8Gbit | 512 | 49,243 | 107.1us | 171.0us | 294.2% | 126MiB |
| Workload | Static TLS | 1,024 | 244,877 | 27.36ms | 564.47ms | 4176.1% | 298MiB |
| Database | Async DB | 1,024 | 116,347 | 8.28ms | 20.60ms | 4353.7% | 236MiB |
Compared with
The Go entries around fnet-h1 on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.
| Entry | Composite | vs fnet-h1 | |
|---|---|---|---|
| fib-tuned | 6061 | +32% | head to head |
| fiber | 5637 | +23% | head to head |
| fib | 5439 | +19% | head to head |
| go-fasthttp | 3505 | -24% | head to head |
| echo | 2118 | -54% | head to head |
Compare fnet-h1 with any Go entry · Compare fnet-h1 with any entry, in any language · Every Go entry, ranked
Results updated · How the benchmark is run · The machine · Add or fix an entry