FlashMQ is a multi-threaded fast lightweight MQTT broker, still in development. It’s written in C++, using mostly POSIX (Linux) APIs, as an event-driven multi-core state machine. This means it aims to scale linearly with the amount of cores in a system, and likewise incur load linear to the amount of clients/messages. Currently, it’s capable of reaching one million messages per second at 1.3 gbit/sec on a single four core server (and play full motion ASCII video at the same time 😉 ).
Despite still being in development, it’s on a release cycle and aims to provide the named features as stable. Serious testers are very welcome at this stage.
Go to the download page and become a tester!
- Simple yet powerful (fast and scales well).
- One thread per CPU/core, with clients living in one thread only.
- Event and readiness-change driven.
- Very few dependencies, for ease of deployment and code stability.
- Stable code base. MQTT is simple enough that you don’t need esoteric features or libraries, so using C++ and few external dependencies, it should be able to compile 20 years from now, and work consistently across OS versions.
- MQTT 3.1 and 3.1.1
- Retained messages
- Native HTTP1 websocket support, without external libraries. HTTP2 will not be implemented. There’s no advantage and it’s overly complex.
- QoS 0, 1 and 2.
- Authentication with plugin or ‘mosquitto_password_file’.
- Native C++ FlashMQ authentication plugin interface.
- Mosquitto auth plugin version 2 compatibility. This comes with a caveat though: it must be thread safe. Config options exist to perform some serialization, but it’s not a guarantee.
- Intel SSE4.2 (SIMD) instructions for string/topic parsing.
- Persistent state (save sessions, subscriptions and retained messages).
Roadmap for the 1.0.0 release
- A lot of testing.
Roadmap for the future