Releases: uNetworking/uWebSockets
v21.0.0-alpha2
v21 and io_uring
With more features added, more optimizations and more examples working properly, here's the current performance metrics comparing uWS v21 against latest denoland/fastwebsockets v0.4.2. As an aside, uWS can now do URL routed HTTP requests at 350k req/sec, which is even faster than what an optimized epoll server can do raw TCP echoing (325k msg/sec) on this machine. Just think about that for a moment - uWS is serving standards compliant HTTP faster than you could do even raw TCP a few years ago. Mind blown.
v20.42.0
uWS never cared to optimize non-SSL, non-compressed semi-big WebSocket message sending, and so was a bit slower than what denoland/fastwebsockets v0.4.2 presented. This release adds such optimization and is now reliably and significantly faster in all cases.
Also, keep up to date for news on the v21 release where io_uring will be default and we see even bigger outperformance.
v21.0.0-alpha1
Linux 6.0+ io_uring as new backend
This alpha release adds initial (still to be further optimized) io_uring support in uWS. It is still very incomplete, but EchoServer, HelloWorld and even HelloWorldThreaded work. As do load_test and http_load_test and possibly other examples.
Here's a comparison against the (minimal) fastwebsockets project, and against uWS v20. We still have a bunch of optimizations to add, zero-copy for instance.
You can build it with LDFLAGS=/usr/lib/liburing.a WITH_IO_URING=1 make
v20.41.0
- Adds the Autobahn|Testsuite as an automatic test run by GitHub Actions, rather than manually.
- A WebSocket parser benchmark has been added.
- A few optimizations to the WebSocketProtocol.h.
v20.40.0
Fixes an edge case where URI querystrings with keys with no value gets interpreted as invalid querystring.
Now the querystring "?one=&two=hello%20world" is considered valid, and HttpRequest.getQuery("two") will return "hello world" like it should.
This release also adds testing for the above case.
v20.39.0
- Fixes a bug introduced in the bug fix of v20.38.0 🥇
- Adds new fuzz target for involved functionality
v20.38.0
Fixes an edge case where calling HttpResponse::upgrade inside HttpResponse::cork from inside a third-party callback would crash.
Full Changelog: v20.37.0...v20.38.0
v20.37.0
What's Changed
- rename capi uws_req_set_field -> uws_req_set_yield by @blackmius in #1561
- Fix some typos by @haberbyte in #1570
- Fix [-Werror=format-truncation] compiler warning by @mtrenkmann in #1575
- fix(CAPI) uws_res_upgrade, uws_res_override_write_offset, feat(CAPI) uws_res_close and subscription events by @cirospaciari in #1571
- Add uws_loop_defer function to uWebsockets CAPI by @GenrikhFetischev in #1579
- Fix reported content length for HttpResponse::endWithoutBody by @atimin in #1557
- Fix chunked body handling in fallback routine by @webcarrot in #1585
New Contributors
- @blackmius made their first contribution in #1561
- @haberbyte made their first contribution in #1570
- @mtrenkmann made their first contribution in #1575
- @GenrikhFetischev made their first contribution in #1579
- @atimin made their first contribution in #1557
- @webcarrot made their first contribution in #1585
Full Changelog: v20.36.0...v20.37.0
v20.36.0
- Yet more fixes to subscription events
v20.35.0
WebSocket subscription handler broken