HttpArena
Frameworks

veil-api

Experimental · Rust · engine: veil · standard configuration · completeness 4/4

veil 0.10 API library (crates.io veil-proxy, full-container: epoll readiness reactor, no tokio or hyper). #[veil::route] handlers with path/query extraction, serde_json responses, compression through [api] compression, WebSocket through WebSocketUpgrade, gRPC services generated by veil-build (prost), /static/* through App::serve_dir. One process with four listeners from the configuration file; HTTP/3 via quiche.

Achievements

🥉 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.

MedalAwardFieldRank
🥉 BronzeTest profileHTTP/2 · Static3 of 14

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.

FamilyRankComposite
HTTP/1.113 of 295091
HTTP/28 of 151901
HTTP/36 of 10686
gRPC5 of 7406
WebSocket14 of 212079

Every result

Alpha Round, 35 runs. Requests per second is the best of three; latency, CPU and memory come from that run.

CategoryProfileConnsReq/secAvgp99CPUMemory
ConnectionBaseline4,0962,509,7981.63ms2.19ms6471.1%258MiB
ConnectionPipelined4,0963,430,341336us360us6520.8%229MiB
ConnectionShort-lived4,0961,990,5282.04ms4.70ms6531.8%356MiB
ConcurrencyAsync Delay32,0001,871,11317.00ms18.60ms6471.4%1.3GiB
EfficiencyLatency-10K1,0249,98284.2us114.0us36.4%131MiB
EfficiencyLatency-1M1,024997,927108.9us179.0us3047.6%132MiB
EfficiencyLatency-500K/81,024369,1382500384.8us6477824.0us788.1%57MiB
WorkloadJSON Comp4,09637,692107.65ms217.00ms946.0%471MiB
WorkloadJSON Comp16,38437,885410.71ms530.40ms937.5%874MiB
WorkloadJSON TLS4,0961,197,8213.40ms50.76ms6439.9%381MiB
Workload8Gbit51249,371105.7us135.0us254.4%143MiB
WorkloadStatic TLS1,024936,6571.04ms15.57ms6419.4%222MiB
HTTP/2Baseline2566,100,5966.37ms4.98s6243.8%216MiB
HTTP/2Baseline1,0244,468,853197.50ms4.94s6291.1%432MiB
HTTP/2Static2561,040,3265.61ms4.98s6355.5%352MiB
HTTP/2Static1,024964,45920.60ms4.90s6470.6%790MiB
HTTP/2Baseline (h2c)2566,009,74212.66ms5.00s6304.6%194MiB
HTTP/2Baseline (h2c)1,0244,858,57487.35ms5.00s6352.5%339MiB
HTTP/2Baseline (h2c)4,0963,851,45659.17ms4.99s6255.9%1.3GiB
HTTP/2JSON (h2c)1,0242,621,79426.53ms5.00s6355.3%420MiB
HTTP/2JSON (h2c)4,0962,391,79019.08ms5.00s6267.2%1.1GiB
HTTP/3Baseline642,643,3081.44ms2.88ms3582.3%367MiB
HTTP/3Static64288,71315.42ms36.42ms4104.5%537MiB
gRPCUnary2561,615,92217.76ms5.00s6418.6%630MiB
gRPCUnary1,0241,356,30553.15ms5.00s6438.5%1.5GiB
gRPCUnary TLS2561,428,57017.48ms1.59s6237.6%865MiB
gRPCUnary TLS1,0241,256,19268.06ms2.04s6418.6%2.8GiB
WebSocketEcho5123,410,445149us310us6489.2%123MiB
WebSocketEcho4,0963,372,0431.21ms1.72ms6643.7%268MiB
WebSocketEcho16,3843,020,7095.39ms6.51ms6584.1%792MiB
WebSocketEcho Pipelined51229,643,388275us527us6730.0%117MiB
WebSocketEcho Pipelined4,09630,432,4702.15ms2.90ms6792.1%271MiB
WebSocketEcho Pipelined16,38428,237,2869.24ms10.40ms6738.7%791MiB
WebSocketEcho Short-lived5121,866,079187us634us5751.9%186MiB
WebSocketEcho Short-lived4,0962,230,8791.50ms3.54ms6195.3%433MiB

Compared with

The Rust entries around veil-api on the HTTP/1.1 composite, and the one leading them. The last column shows every profile side by side.

EntryCompositevs veil-api
cpeak7347+44%head to head
trillium-tuned6036+19%head to head
actix5942+17%head to head
tokio4639-9%head to head
trillium4258-16%head to head

Compare veil-api with any Rust entry · Compare veil-api with any entry, in any language · Every Rust entry, ranked

Results updated · How the benchmark is run · The machine · Add or fix an entry