From bedac4099eec42256c61f56692fceb036c91f830 Mon Sep 17 00:00:00 2001 From: Takatoshi Kondo Date: Sat, 1 Mar 2025 21:18:10 +0900 Subject: [PATCH] Update async_mqtt. It supports I/O independent protocol library (a.k.a Sans-I/O) now. A Broker is also added using the library. --- _sites/software.md | 9 ++++++++- assets/img/software/async-mqtt.png | Bin 0 -> 24456 bytes 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 assets/img/software/async-mqtt.png diff --git a/_sites/software.md b/_sites/software.md index ad92de8..0d9a1d3 100644 --- a/_sites/software.md +++ b/_sites/software.md @@ -39,6 +39,13 @@ description: A collection of links to all important MQTT brokers/servers, MQTT c The “next generation” of ActiveMQ, Artemis is a multi protocol messaging broker that supports MQTT. + +
+ +

async_mqtt

+ An open-source MQTT broker using C++17 that supports MQTT v3.1.1 and v5.0. It also supports TLS, WebSocket, and multi-core scale-out. Licensed under the Boost Software License - Version 1.0. +
+
@@ -412,7 +419,7 @@ description: A collection of links to all important MQTT brokers/servers, MQTT c
  • libmosquittopp
  • Eclipse Paho Embedded C++
  • mqtt_cpp - MQTT client and server library based on C++14 and Boost.Asio. It supports MQTT v3.1.1 and v5.
  • -
  • async_mqtt - MQTT client and server library based on C++17 and Boost.Asio. It supports MQTT v3.1.1 and v5.0. This is an evolved mqtt_cpp.
  • +
  • async_mqtt - An I/O-independent (also known as Sans-I/O) MQTT protocol library for C++17. Additionally, it includes a Boost.Asio binding for asynchronous MQTT communication and can be used for developing both MQTT clients and servers. Licensed under the Boost Software License - Version 1.0.
  • eMQTT5 - MQTT 5.0 client.
  • Async.MQTT5 - A professional, industrial-grade C++17 MQTT v5.0 client built on Boost.Asio.
  • diff --git a/assets/img/software/async-mqtt.png b/assets/img/software/async-mqtt.png new file mode 100644 index 0000000000000000000000000000000000000000..e010acaf88dcbc77092aa9acb82774a288a7e43c GIT binary patch literal 24456 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 d