czw., 30 lis 2023 o 16:24 Ivica Siladic via Boost
Dear Boost Developers,
we are writing to introduce a new C++ Async.MQTT5 library that we believe would be a valuable addition to Boost.
MQTT has become the de-facto standard for IoT communication, with billions of IoT devices relying on it to publish or retrieve data from the cloud. Despite its widespread use, integrating MQTT into a C++ embedded application remains a complex and error-prone task. This challenge primarily arises from the absence of a higher-level library that offers a straightforward interface for message publishing and receiving while abstracting MQTT protocol intricacies and effectively managing various corner cases inherent in MQTT implementation.
The primary objective behind developing Async.MQTT5 was to address these challenges comprehensively, allowing developers to focus on the messages they need to send without concerns about underlying network connectivity issues.
Async.MQTT5 is a C++20 client implementation of the MQTT 5.0 protocol, leveraging Boost Asio and Boost Spirit. It fully adheres to the Asio asynchronous model, providing comprehensive support for all forms of asynchronous completion tokens, per-operation cancellation, and custom allocators. The library is designed to work seamlessly with any ordered network transport, typically TCP, SSL/TLS over TCP, or WebSockets (secured and unsecured).
Our goal with Async.MQTT5 is to offer developers a simple and clear C++ interface for sending and receiving messages using the MQTT 5.0 protocol.
Emphasizing code readability was a key design principle of Async.MQTT5. For instance, tedious protocol message parsing/composing is implemented declaratively (partially utilizing Boost Spirit). Additionally, Asio composed operations are implemented using a novel, clear, and highly efficient "chaining functional operators" approach.
It is worth noting that the library is already written following Boost style guidelines, and the documentation is crafted and formatted in line with Boost conventions.
You can find the library at https://github.com/mireo/async-mqtt5, and the documentation is available at https://spacetime.mireo.com/async-mqtt5/.
We highly value your opinion and would appreciate any feedback you can provide on the Async.MQTT5 library.
Thank you for your time and consideration.
Thank you for submitting this proposal. But let me be the devil's advocate here. I did not look at the implementation, or documentation in detail. My concern is about "adding an ASIO-based client for a protocol". I am not familiar with MQTT 5.0 and this is the first time I have seen this name. My impression is that it is not popular, surely far less than the HTTP protocol. My question to the Boost community is, does every good library need to be included in Boost? I thought that Boost was supposed to be an "extended Standard Library", containing: 1. Portability fixes 2. Implementing missing language features 3. Vocabulary types (I consider Boost.ASIO one) 4. Frequently used components 5. Ground-breaking designs and ideas Async.MQTT5 doesn't fit into any of these categories. (Neither does Boost.AEDIS or Boost.MySql.) Do we have a clear set of criteria for what belongs to Boost? And I do not mean only the quality bar, but also the range of business domain. What's wrong with a good library hosted on its own in GitHub? Regards, &rzej;