Сравнение реализаций MQTT - Википедия - Comparison of MQTT implementations

MQTT (MQ Telemetry Transport или же Транспорт телеметрии очереди сообщений) является Стандарт ISO (ISO / IEC PRF 20922)[1] опубликовать-подписаться протокол обмена сообщениями. Он работает поверх Протокол TCP / IP. Он разработан для подключений к удаленным местам, где требуется «небольшой объем кода» или ограничена пропускная способность сети. В шаблон обмена сообщениями публикация-подписка требует брокер сообщений.

Все категории сравнения используют стабильную версию каждой реализации, перечисленной в разделе обзора. Сравнение ограничивается функциями, относящимися к протоколу MQTT.

Обзор

В следующей таблице перечислены библиотеки и реализации MQTT, а также общая информация о каждом из них.

ВыполнениеРазработанОткрытый исходный кодЛицензия на программное обеспечениеВладелец авторских правЯзык программированияТипПоследний стабильный выпуск, дата выпускаИсточник
Adafruit IOАдафрутдаЛицензия MITАдафрутРубин, Node.js, Python, Идти[2]Клиент2.0.0,[3]
?
нас
EMQ X[4]EMQдаЛицензия Apache версии 2.0EMQ Enterprise, Inc.Erlang[5]МаклерV3.0,[6]
2019-04-03
Китай
флеспи[7]ГуртамНетКоммерческая лицензияГуртамCМаклер2018-04-05Беларусь
GridServerСистема GRIDдаMPL 2.0GRID System S.A.SПаскаль, DelphiМаклер2019-09-15Франция
Клиент HiveMQ MQTT[8]HiveMQдаЛицензия Apache версии 2.0HiveMQЯваКлиент1.2.1,[9]
2020-08-09
Германия
HiveMQ Community Edition[10]HiveMQдаЛицензия Apache версии 2.0HiveMQЯваМаклер2020.6,[11]
2020-11-17
Германия
HiveMQ[12]HiveMQНетКоммерческая лицензияHiveMQЯваМаклер4.4.4,[13]
2020-12-15
Германия
Шлюз сообщений IBM WIoTP[14]IBMНетКоммерческая лицензияIBMCМаклер5.0.0.1 2019-02-29
JoramMQ[15]ScalAgent D.T.Нет, на основе OW2 / Joram 5.16, брокера с открытым исходным кодом (LGPL)Коммерческая лицензияScalAgent D.T.ЯваМаклер1.13 2019-04-29Франция
KMQTT[16]Давиде ПьянкадаЛицензия MITДавиде ПьянкаКотлинМаклер0.2.1,[17]

2020-08-15

Италия
M2Mqtt[18]ЗатмениедаОбщественная лицензия Eclipse 1.0ЗатмениеC #Клиент4.3.0.0,[19]
2017-05-20
Канада
Головка машины[20]ClojureWerkz[21]даЛицензия Creative Commons Attribution 3.0 без переносаАлександр Петров, Михаил Клишин, ClojureWerkz TeamClojureКлиент1.0.0,[20]
2017-03-05
мокет[22]Андреа СельвадаЛицензия Apache версии 2.0Андреа СельваЯваМаклер0.12.1,[23]
2019-03-03
Италия
Москитто[24]ЗатмениедаОбщественная лицензия Eclipse 2.0, Лицензия распространения Eclipse 1.0 (BSD)ЗатмениеCКлиент и брокер2.0.2,[25]
2020-12-10
Великобритания
MQTT-C[26]Лиам БиндлдаЛицензия MITЛиам БиндлCКлиент1.1.1,[27]
2020-02-05
Канада
mqttools[28]Эрик МоквистдаЛицензия MITЭрик МоквистPythonКлиент и брокер0.34.0, 2020-01-20Швеция
net-mqtt[29]Дастин СаллингсдаBSD 3-пунктДастин СаллингсHaskellКлиент0.6.0.0, 2019-10-12нас
Paho MQTT[30]ЗатмениедаОбщественная лицензия Eclipse 1.0, Лицензия распространения Eclipse 1.0 (BSD)[31]ЗатмениеC, C ++, C #, Идти, Ява, JavaScript, Python, Ржавчина[32]Клиент1.4.0 (Фотон),[33]
2018-06-27
Великобритания
PubSub +[34]УтешениеНетКоммерческая лицензия, бесплатная версияУтешениеC, C ++Маклер8.13
2018-09-28
Канада
Thingstream[35]ThingstreamНетКоммерческая лицензияThingstreamC, C ++, Ява, JavaScript, Python, ИдтиКлиент и брокер3.3.0

2019-03-14[36]

Великобритания
VerneMQ[37]VerneMQ / ErlioдаЛицензия Apache версии 2.0VerneMQ / ErlioErlang / OTPМаклер1.9.1

2019-08-12

Швейцария
wolfMQTT[38]wolfSSL[39]даСтандартная общественная лицензия GNU, версия 2, Коммерческая лицензия[38]wolfSSLCКлиент1.7[40]
2020-08-21
нас
eMQTT5[41]Кирилл РуссодаЛицензия MITКирилл РуссоC ++Клиент1.0, 2020-03-31Франция
Bevywise MQTTБрокер[42]Bevywise NetworksНетКоммерческая лицензияBevywise NetworksC, PythonМаклерВерсия 1.1, 20 октября 2018 г.Индия
Привязка OpenHAB MQTT[43]OpenHABдаОбщественная лицензия EclipseOpenHABЯваКлиент2.5.4, 2020-04-21Германия
Водный поток[44]SimpleMatter[45]НетКоммерческая лицензияSimpleMatter SrlКотлинМаклер1.00.03Италия

Более полный список реализаций MQTT можно найти на GitHub.

Поддержка протокола

Есть несколько версий MQTT протокол в настоящее время стандартизирован. Ниже приведен список, содержащий самые свежие версии MQTT протокол с организацией, которая их стандартизировала.

В следующей таблице перечислены версии MQTT, поддерживаемые каждой реализацией, а также указана их поддержка для SSL / TLS и TCP. Безопасность обеспечивается SSL / TLS может быть желательным в зависимости от типа трафика, передаваемого между устройствами, поскольку MQTT передает сообщения в ясном.[51]

ВыполнениеMQTT-SN v1.2MQTT 3.1MQTT 3.1.1MQTT 5.0SSL / TLSTCPWS / WSS
EMQдадададададада
флеспидадада[52]дада
HiveMQДа (только для брокера)дада [53]дадада
Шлюз сообщений IBM WIoTPдададададада
JoramMQдадададададада
KMQTTдададада
M2Mqttдададада
Головка машины
мокетдадада[54]да
МоскиттодададаПоддерживает SSL / TLS на основе сертификатов и предварительных общих ключей,

общая поддержка SSL / TLS через мосты[55]

дада
MQTT-Cдададада
mqttoolsдадада
net-mqttдададададада
Paho MQTT[30]да [56]дадаДа (только в клиентской библиотеке C и Java) [57]дадада
Утешение PubSub +дададада
Thingstreamдададада
VerneMQдададададада
wolfMQTTдадададада
eMQTT5дадада
Bevywise Networksдададададада
Водный потокдададада

Предлагаемые уровни качества обслуживания (QoS)

От MQTT страница, QoS (качество обслуживания) описывается как,

Качество обслуживания относится к механизмам приоритизации трафика и резервирования ресурсов, а не к достигнутому качеству обслуживания. Качество обслуживания - это способность предоставлять разный приоритет различным приложениям, пользователям или потокам данных или гарантировать определенный уровень производительности для потока данных.

Описание каждого QoS уровень находится ниже.[58]

  1. Максимум один раз доставка (выстрелил и забыл)
  2. Хотя бы один раз доставка (подтвержденная доставка)
  3. Ровно после доставки (гарантированная доставка)

В следующей таблице перечислены поддерживаемые каждой реализацией уровни QoS.

Выполнение012
Adafruit IOдадаНет[59]
EMQ[60]дадада
флеспи[52]дадада
HiveMQ[61]дадада
Шлюз сообщений IBM WIoTPдадада
JoramMQдадада
KMQTTдадада
M2Mqtt[18]дадада
мокет[62]дадада
Москитто[63]дадада
MQTT-Cдадада
mqttoolsдаНетНет
net-mqttдадада
Paho MQTTдадада
Утешение PubSub +дадаНет[64]
Thingstreamдадада
VerneMQдадада
wolfMQTT[38]дадада
eMQTT5дадада
Bevywise MQTTБрокердадада
Водный потокдадада

Проблемы переносимости

Проблемы переносимости в этом разделе относятся к техническим деталям, которые могут быть решающими факторами при выборе реализации для использования. В общем, эту таблицу следует использовать тем, кто лучше знает устройство, которое они будут использовать.

ВыполнениеТребования к платформеСетевые требованияБезопасность потоковВозможность кросс-компиляцииОголенный метал
Adafruit IOAdafruit Feather Huzzah, ESP8266, Raspberry Pi, Arduino, любая платформа, поддерживающая Python, Рубин, или же Node.jsЗависит от платформы
EMQLinux, Unix, MacOS, Windows, Raspberry Pi[65]дадада
флеспи
HiveMQJVM, Linux, MacOS, Windows, Raspberry Piдадада
KMQTTJVM, Linux, Windows, Raspberry Piдада
M2MqttЛюбая платформа .NET (.NET Framework, .NET Compact Framework, .NET Micro Framework ), WinRT
Головка машиныLeiningen 2[66]
комарC90, Linux, Unix, MacOS, Windows, Raspberry Piдада
MQTT-CANSI C (C89 )
Независимость от платформы (используется в голом металле, Linux, MacOS, и Windows Приложения)
Обратные вызовы сетевого ввода-выводаДа. Дополнительно поддерживает однопоточные приложения.[67]дада
net-mqttGHCдадада
Paho MQTTANSI C (за C клиент),
C ++ 11 (за C ++ клиент),
JVM или же Android (за Ява клиент)
За C, C ++ клиентыЗа C, C ++ клиенты
wolfMQTTC89Обратные вызовы сетевого ввода-выводададада
eMQTT5Linux, Unix, MacOS, Windows, ESP32, STM32 (с lwIP и MBedTLS ) C ++ 11Реализация сокета BSDдадада
Bevywise MQTTБрокерLinux, Unix, MacOS, Windows, Raspberry Piда

Основные требования

В следующей таблице показаны различные требования, которые могут быть полезны при принятии решения о том, какую реализацию использовать для устройства.

ВыполнениеИнструменты сборкиТребования к платформеПоддерживаемые операционные системы
Adafruit IO
EMQErlang / OTP R19 + (при сборке из исходников)[65]Linux, Unix, MacOS, Windows, Raspberry Pi[65]CentOS, Debian, Докер, Mac OS X, Ubuntu, Red Hat Enterprise Linux, Windows 10, Windows 7, Raspbian (ОС Raspberry Pi) [68]
флеспиN / A (облачный)
HiveMQLinux, Unix, MacOS, Windows, Raspberry PiCentOS, Debian, Докер, Ubuntu, Red Hat Enterprise Linux, Mac OS X, Windows 10, Windows 7, Raspbian (ОС Raspberry Pi)
Шлюз сообщений IBM WIoTPLinuxCentOS, Докер, Red Hat Enterprise Linux
JoramMQMaven, JavaLinux, Unix, MacOS, Windows, Raspberry PiCentOS, Debian, Докер, Mac OS X, Ubuntu, Windows 10, Windows 7
KMQTTGradle, КотлинLinux, JVM, Windows, Raspberry PiLinux, Windows
M2MqttVisual StudioЛюбая платформа .NET (.NET Framework, .NET Compact Framework, .NET Micro Framework ),
WinRT
Windows 98 или новее, Windows Phone 8.1[18]
Головка машиныMaven, LeiningenLeiningen 2[66]Mac OS X, Linux (конкретные упоминания о Debian, Ubuntu )[69]
комарДелать, CMakeC90BSD, Linux, macOS, QNX, Windows[70]
MQTT-CДелать (необязательный)
CMake (необязательный)
Компилятор C (ANSI C /C89 или позже)Оголенный метал, Linux, MacOS, Windows
net-mqttкучаGHC
Paho MQTTАвтоинструменты, CMake, gmake, gcc, g ++ или же лязг ++ за C ++ клиенты, Maven за Ява клиентыANSI C (за C клиент),
C ++ 11 (за C ++ клиент),
JVM или же Android (за Ява клиент)
Зависит от языка. См. Официальную страницу загрузки Eclipse Paho MQTT здесь.
Утешение PubSub +Linux, MacOS, WindowsCentOS, Debian, Докер, KVM, Ubuntu, Red Hat Enterprise Linux, Mac OS X, Windows 10, Windows 7; также облако[71]
wolfMQTTАвтоинструменты (autoconf, automake), wolfSSL для включения дополнительных функций, таких как SSL / TLS поддерживатьC89Win32 / 64, Linux, Mac OS X, Солярис, ThreadX, VxWorks, FreeBSD, NetBSD, OpenBSD, встроенный Linux, Yocto Linux, OpenEmbedded, WinCE, Хайку, OpenWRT, iPhone (iOS), Android, Nintendo Wii и Gamecube через DevKitPro, QNX, MontaVista, Без остановки, ТРОН / ИТРОН / мкИТРОН, Микриум µC / OS-III, FreeRTOS,SafeRTOS, NXP / Freescale MQX, Ядро, TinyOS, HP / UX, AIX, ARC MQX, TI-RTOS, uTasker, embOS, Во время, Мбед, uT-ядро, БУНТ, CMSIS-RTOS, [1], Green Hills ЦЕЛОСТНОСТЬ, Keil RTX, ТОПЕРЫ, PetaLinux, Apache Mynewt, PikeOS[38] (Иды: Ардуино, Гармония MPLAB[72])
eMQTT5cmake, MbedTLS для включения дополнительных функций, таких как SSL / TLS поддерживатьC ++ 11Win32 / 64, Linux, Mac OS X, FreeRTOS, FreeBSD, NetBSD, OpenBSD, встроенный Linux, Yocto Linux,
Bevywise MQTTБрокерАвтоинструменты , Visual StudioLinux, Unix, MacOS, Windows, Raspberry PiCentOS, Debian, Докер, KVM, Ubuntu, Red Hat Enterprise Linux, Mac OS, Windows32 / 64, Windows Server, Raspberry Pi, также Облако
OpenHABЗатмение Система сборки JavaLinux, Unix, MacOS, Windows, Raspberry PiCentOS, Debian, Ubuntu, Red Hat Enterprise Linux, Mac OS, Windows32 / 64, Raspberry Pi

Рекомендации

  1. ^ «ISO / IEC 20922: 2016 Информационные технологии - Телеметрия очереди сообщений (MQTT) v3.1.1». iso.org. Международная организация по стандартизации. 15 июня 2016 г.
  2. ^ "Обзор | Добро пожаловать в Adafriut IO | Adafruit Learning System". learn.adafruit.com.
  3. ^ «Документация Adafruit IO REST API». io.adafruit.com.
  4. ^ "EMQ". emqx.io.
  5. ^ "EMQ X- Erlang MQTT Broker - EMQ X - Документация по Erlang MQTT Broker 3.0". emqx.io. Получено 2018-09-30.
  6. ^ «Журнал изменений и примечания к выпуску EMQ X». emqx.io.
  7. ^ "брокер flespi MQTT". flespi.com.
  8. ^ "Клиент HiveMQ MQTT". hivemq.com.
  9. ^ «Выпуск HiveMQ MQTT Client 1.2.1». hivemq.com.
  10. ^ "HiveMQ Community Edition". hivemq.com.
  11. ^ «HiveMQ CE 2020.6». hivemq.com.
  12. ^ "HiveMQ". hivemq.com.
  13. ^ «Выпущен HiveMQ 4.4.4». hivemq.com.
  14. ^ «Шлюз сообщений WIoTP». ibm.com.
  15. ^ "JoramMQ". jorammq.com.
  16. ^ Пьянка, Давиде (2020-07-05), davidepianca98 / KMQTT, получено 2020-07-06
  17. ^ «Выпуск 0.2.0 · davidepianca98 / KMQTT». GitHub. Получено 2020-07-06.
  18. ^ а б c "Eclipse Paho M2Mqtt". eclipse.org.
  19. ^ "Релизы M2MQTT". github.com.
  20. ^ а б "Машинная голова". clojuremqtt.info.
  21. ^ "ClojureWerks". clojurewerz.org.
  22. ^ "мокет". github.com.
  23. ^ "мокетные релизы". github.com.
  24. ^ "Москитто". mosquitto.org.
  25. ^ "Mosquitto ChangeLog.txt". 10 декабря 2020 г.. Получено 16 декабря 2020.
  26. ^ «MQTT-C». liambindle.ca/MQTT-C.
  27. ^ "Релизы MQTT-C". github.com.
  28. ^ "mqttools". github.com.
  29. ^ "net-mqtt: реализация протокола MQTT". Взлом. Получено 2019-09-16.
  30. ^ а б "Пахо". eclipse.org. Получено 2020-12-16.
  31. ^ «Лицензия на распространение Eclipse - версия 1.0». eclipse.org.
  32. ^ «Загрузки Eclipse Paho - Сравнение клиентов MQTT».
  33. ^ «Последние выпуски». eclipse.org/projects.
  34. ^ "Solace PubSub +". solace.com.
  35. ^ "Дома". Thingstream. Получено 2019-01-31.
  36. ^ «DOCS - Примечания к выпуску». sites.google.com. Получено 2019-06-07.
  37. ^ "VerneMQ MQTT Брокер". vernemq.com.
  38. ^ а б c d "Клиентская библиотека wolfMQTT | Встроенные коммуникационные продукты wolfSSL". wolfSSL. Получено 2020-12-16.
  39. ^ "wolfssl.com".
  40. ^ "Журнал изменений wolfMQTT | Документация встроенной библиотеки wolfSSL SSL / TLS". wolfSSL. Получено 2020-12-16.
  41. ^ «Клиентская библиотека eMQTT v5.0». github.com.
  42. ^ «Брокер Bevywise MQTT». bevywise.com.
  43. ^ «Клиент MQTT». openhab.org.
  44. ^ «Водный поток». waterstream.io.
  45. ^ "SimpleMatter". simplematter.io.
  46. ^ Энди Стэнфорд-Кларк, Хонг Линь Чыонг (14 ноября 2013 г.). «Спецификация протокола MQTT для сенсорных сетей (MQTT-SN), версия 1.2» (PDF). IBM.CS1 maint: использует параметр авторов (связь)
  47. ^ «Спецификация протокола MQTT V3.1». public.dhe.ibm.com. 2010. Получено 2017-12-13.
  48. ^ Отредактировано Эндрю Бэнксом и Рахулом Гуптой (29 октября 2014 г.). «MQTT версии 3.1.1». ОАЗИС.CS1 maint: использует параметр авторов (связь)
  49. ^ Отредактировано Эндрю Бэнксом и Рахулом Гуптой (10 декабря 2015 г.). «Версия MQTT 3.1.1 плюс исправление 01». ОАЗИС.CS1 maint: дополнительный текст: список авторов (связь)
  50. ^ Под редакцией Эндрю Бэнкса, Эда Бриггса, Кена Боргендейла и Рахула Гупты (25 декабря 2017 г.). «MQTT версии 5.0». ОАЗИС.CS1 maint: несколько имен: список авторов (связь) CS1 maint: дополнительный текст: список авторов (связь)
  51. ^ «FAQ - Часто задаваемые вопросы | MQTT». mqtt.org. Получено 2018-01-30.
  52. ^ а б «Контрольный список соответствия MQTT 5.0». flespi.com.
  53. ^ «HiveMQ 4.1». hivemq.com.
  54. ^ «Документация Moquette - Конфигурация SSL».
  55. ^ "mosquitto.conf (5)".
  56. ^ «Eclipse Paho - Прозрачный шлюз MQTT-SN». Получено 2020-12-16.
  57. ^ "Eclipse Paho 1.4.0 (Фотон)".
  58. ^ «Центр знаний IBM». www.ibm.com. Получено 2018-01-30.
  59. ^ «MQTT API». adafruit.com.
  60. ^ «EMQ X - Erlang MQTT Broker - EMQ 3.0 - документация». emqx.io. Получено 2018-09-30.
  61. ^ https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels/
  62. ^ Сельва, Андреа (29.01.2018), moquette: облегченный брокер Java MQTT, получено 2018-02-01
  63. ^ "mosquitto.conf". mosquitto.org. Получено 2017-12-15.
  64. ^ «Документация по Утешению - Поддерживаемые уровни качества обслуживания».
  65. ^ а б c emqttd: EMQ - Брокер Erlang MQTT, emqtt, 30.09.2018, получено 2018-09-30
  66. ^ а б machine_head: клиент Clojure MQTT, ClojureWerkz, 29 ноября 2017 г., получено 2017-12-13, Machine Head использует Leiningen 2. Убедитесь, что он установлен, а затем запустите тесты для поддерживаемых версий Clojure, используя ...
  67. ^ «Однопоточные приложения MQTT-C». liambindle.ca/MQTT-C/group__api.html#gae3d3aafc7588ed53a90c9f66fc620a6e.
  68. ^ emqx.io, фен в. "EMQ X- Загрузки". emqx.io. Получено 2018-09-30.
  69. ^ «Начало работы с MQTT и Clojure». clojuremqtt.info. Получено 2017-12-14.
  70. ^ "Загрузки | Москитто". mosquitto.org. Получено 2017-12-14.
  71. ^ «Утешение PubSub + Cloud». cloud.solace.com.
  72. ^ "Руководство пользователя wolfMQTT - 2.4 Создание на других системах". 2018-05-25. Получено 2020-12-16.