Releases: uNetworking/uWebSockets
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
v20.34.0
Easy shutdown with App.close()
Calling this new function will:
- Close and invalidate all open listen sockets.
- Force close all open connections (both HTTP and WebSockets), calling their respective callbacks as needed (.onAborted, .close, .subscription).
This call can be used to gracefully close and release an App that needs maintenance.
v20.33.0
Rebalancing with maxLifetime
A reworked timeout system now allows two lightweight timeout settings for WebSockets; idleTimeout
(up to 16 minutes) and maxLifetime
(up to 4 hours):
idleTimeout
is how long (in seconds) a WebSocket may be idle (have no traffic) before it is considered closed.maxLifetime
is how long (in minutes) a WebSocket may be connected, before being gracefully closed by the server.
Specifying a value of 0 disables respective feature (the default for maxLifetime
).
Why use maxLifetime?
The idea here is to enforce a partial rebalancing, constantly forcing a few connections to reconnect via whatever load balancer in use. This is a strategy used by Netflix where they found success in having maxLifetime = 30
minutes.
Good values for the settings should be somewhere around 30-120 seconds idleTimeout
and 30-120 minutes maxLifetime
.
v20.32.0
Subscription events
A new kind of event has been added. Whenever a WebSocket::subscribe
or WebSocket::unsubscribe
call is made, or when implicit unsubscription happens (such as when a WebSocket has subscriptions and gets closed in any way), a subscription event will fire with:
- the WebSocket involved
- the topic name
- the new number of subscribers to this topic
- the former number of subscribers to this topic
These events can be used to easily manage external subscriptions such as when using Redis to orchestrate multiple instances of uWS. Whenever a subscription event with new subscription count == 1; you can create the corresponding Redis subscription. Whenever a subscription event with new subscription count == 0; you can free the corresponding Redis subscription.
v20.31.0
- Don't use strftime for Date header (it depends on locale)
v20.30.0
- Fixes undefined behavior introduced in v20.28.0