Repository navigation
Add uWebZockets (Zig) framework entry - #1536
Coder-Blue wants to merge 13 commits into
Conversation
|
/benchmark -f uwebzockets --save |
|
👋 Benchmark request received. A collaborator will review and approve the run. |
|
Yo, can you check validations issues before I benchmark? |
Oh, sure. I'm on it. |
29db0d0 to
20d54c5
Compare
|
/benchmark -f uwebzockets --save |
|
👋 Benchmark request received. A collaborator will review and approve the run. |
Benchmark ResultsFramework:
Full log |
|
Uhm, what's up with the yellow caution sign emoji? |
|
@MDA2AV, did the validation issues from earlier disappear? I committed some new changes, but I don't see any workflow approval. |
some tests have fixed throughput, if the server cannot reach that value it will have a penalization on that test. |
Thanks for the info, sir! |
Zero-allocation shared-nothing Zig framework on libxev, serving HTTP/1.1, HTTP/2, HTTP/3 and WebSocket from bounded startup slabs. Standard configuration: plaintext clusters for h1/WS and h2c, single TLS listeners for json-tls, baseline-h2 and baseline-h3.
Flatten handlers/shared into src/main.zig to match the nilo/dusty layout and set enable_dev_log=false in the cluster configs.
Bringing all four listeners up together resets the first connections served on 8080 under startup contention; starting http last avoids the window.
Each listener is a thread in the same binary, so entrypoint.sh is gone.
|
please mark as experimental at meta.json (type) |
Fair enough, I'm on it! |
Adds uWebZockets — a zero-allocation, shared-nothing Zig framework on libxev with a typed Request/Response API. Marked experimental / standard; completeness 4/4 (radix router, middleware pipeline, typed request parsing, response helpers).
Profiles: baseline, pipelined, limited-conn, json-comp, json-tls, baseline-h2, baseline-h2c, json-h2c, baseline-h3, echo-ws (+ pipeline and limited) and the three latency profiles.
How it runs: one static binary, four listeners, each on its own thread:
Worker count adapts to the host (cpus/2, capped at 32). JSON is serialized and gzipped per request with the framework's std.json and libdeflate stream — nothing pre-rendered — and the WebSocket echo uses �pp.ws with default buffers.
Left out deliberately: 8gbit, static-h2, static-h3 and static-tls. In 1.8.0 the TLS constructors are fixed to the default config (16 KiB bodies, 64 KiB static buffer), so the 100 KiB echo validation and the bigger static assets can't be served through them. �sync has no public timer API, and there's no database/template/gRPC/gateway support in the framework.