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_count
option, which uses MQTT5 shared subscriptions to balance the load. When using FlashMQ on both sides, it includes loop prevention if there are overlappingpublish
andsubscribe
directives, and also automatically selects the bestshared_subscription_targeting
. - Bridges and listeners now have a
max_buffer_size
option, so that more buffering is possible for connections between servers than normal clients. - Listeners now have an
only_allow_from
anddeny_from
option. 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
Upgrade
header in websockets. This can occur if being proxied from newer versions of Nginx, which combines headers this way.