Repository navigation
Add uWebZockets (Zig) framework entry - #1536
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! |
|
@MDA2AV I marked my framework as experimental just like you requested. So what should I do next? |
|
/benchmark --save |
|
👋 Benchmark request received. A collaborator will review and approve the run. |
Benchmark ResultsFramework:
Full log |
|
You should fix this.. some tests are just broken and you're not using the 64 available cpus |
Okay, I'm on it. Maybe I just accidentally hard-wired something. |
|
/benchmark -f uwebzockets --save |
|
👋 Benchmark request received. A collaborator will review and approve the run. |
Benchmark ResultsFramework:
Full log |
|
Interesting. The |
|
Well, it is quite obvious you have cpu scaling issues with anything that touches tls |
|
Confirmed. The current uWebZockets v1.8 public API only exposes TLS through a single I have corrected the entry metadata so it no longer claims physical-core pinning, and left the benchmark result intact rather than hiding the limitation. The framework remains correctly classified as experimental. I will add TLS-cluster support in the next uWebZockets release, then update the dependency and request a fresh benchmark. This PR now accurately represents the released library API and its current limitation. |
|
I have now removed the unsupported |
|
/benchmark -f uwebzockets --save |
|
👋 Benchmark request received. A collaborator will review and approve the run. |
Benchmark ResultsFramework:
Full log |
|
Thank you for merging this PR. It was a pleasure working with you! I appreciate your time and support. I will continue hardening my framework. |
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-h2c, json-h2c, baseline-h3, echo-ws (+ pipeline and limited) and the three latency profiles.
How it runs: one static binary with four listener groups:
init_https(BoringSSL), used for json-tls.init_http3(lsquic), used for baseline-h3.The released uWebZockets v1.8 public API only exposes TLS through a single application listener. Plaintext and h2c use the cluster API, but TLS-touching profiles therefore currently scale to one event loop/core. baseline-h2 is deliberately not subscribed, and its unused TCP listener has been removed: its required 1,024-connection case cannot make progress with the released TLS listener. TLS-cluster support will arrive in a follow-up uWebZockets release, after which baseline-h2 can be restored and freshly benchmarked.
Left out deliberately: baseline-h2, 8gbit, static-h2, static-h3 and static-tls. The public v1.8 TLS constructors use fixed default capacities that cannot serve the 100 KiB echo validation or the larger static assets through the framework API. There is no public timer API, database/template/gRPC/gateway support in the framework.