New features
- Unix domain socket support has been added to listeners.
- Listeners can now have an
acme_redirect_url, either as dedicated listener, or multiplexed on an MQTT listener. This allows Let’s Encrypt / certbot to run decoupled from the host running FlashMQ. - Listeners now have an option
drop_on_absent_certificate. This can be useful in combination with theacme_redirect_url, so that you don’t have to complicate management of the configuration file when bootstrapping. - Bridges now have a
connection_countoption, which uses MQTT5 shared subscriptions to balance the load. When using FlashMQ on both sides, it includes loop prevention if there are overlappingpublishandsubscribedirectives, and also automatically selects the bestshared_subscription_targeting. - Bridges and listeners now have a
max_buffer_sizeoption, so that more buffering is possible for connections between servers than normal clients. - Listeners now have an
only_allow_fromanddeny_fromoption. Not only does this aid in having special purpose listeners with different security (like for bridges), but also aids in the design goal of being able to run FlashMQ without a (connection tracking) firewall (which incurs load).
The load-balancing enhancements are the first step in a series of improvements that are planned to greatly enhance (geo)distributed servers.
Plugin changes
The function flashmq_get_client_address() has been replaced with flashmq_get_client_address_v4(). It now has the same API as functions like accept(). This was required for the included support of Unix domain sockets, and to fully rule out undefined behavior in C++ when using the C socket API (although no problems were ever seen). Documentation has been added to describe address this point.
The original function remains functional, so plugins remains binary compatible.
Fixes
- Enhancements to the development and testing process for increased reliability, like compiler address sanitation.
- Support comma-separated
Upgradeheader in websockets. This can occur if being proxied from newer versions of Nginx, which combines headers this way.