「MQTT(Message Queuing Telemetry Transport)」 Это легкий протокол обмена сообщениями, обычно используемый для связи в Интернете вещей (IoT) и сенсорных сетях. Он предназначен для передачи данных через сетевые среды с низкой пропускной способностью, нестабильностью или высокой задержкой, что делает его идеальным для связи между подключенными устройствами, особенно в средах с ограниченными ресурсами.
В этой статье кратко описывается протокол высокого уровня.,Затем используйте инструмент MQTTклиент,И напишите клиенту с помощью библиотеки с открытым исходным кодом.,Попробуйте.
「MQTT(Message Queuing Telemetry Transport)」 Это легкий протокол обмена сообщениями, обычно используемый для связи в Интернете вещей (IoT) и сенсорных сетях. Он предназначен для передачи данных через сетевые среды с низкой пропускной способностью, нестабильностью или высокой задержкой, что делает его идеальным для связи между подключенными устройствами, особенно в средах с ограниченными ресурсами.
К основным особенностям MQTT относятся следующие:
Таким образом, MQTT — это протокол связи, который хорошо подходит для Интернета вещей и сенсорных сетей и широко используется благодаря своим легким и эффективным свойствам. Оно позволяет устройствам обмениваться информацией в режиме реального времени, поддерживая различные приложения, включая умные дома, промышленную автоматизацию, сельскохозяйственный мониторинг и многое другое.
Каковы механизмы QoS? (https://www.emqx.com/zh/blog/introduction-to-mqtt-qos)
Зачастую устройства, использующие протокол MQTT, работают в средах с ограниченным доступом к сети, и использование только базового протокола передачи TCP не может полностью гарантировать надежное поступление сообщений. Таким образом, MQTT предоставляет механизм QoS, суть которого заключается в разработке нескольких механизмов взаимодействия сообщений для обеспечения различного качества услуг для удовлетворения требований пользователей к надежности сообщений в различных сценариях.
MQTT определяет три уровня QoS:
Среди них использование QoS 0 может привести к потере сообщения, использование QoS 1 может гарантировать, что сообщения будут получены, но сообщения могут повторяться, а использование QoS 2 может гарантировать, что сообщения не будут потеряны или повторены. Изменение уровня QoS от низкого к высокому означает не только повышение надежности сообщений, но и увеличение сложности передачи.
MQTTnet — это высокопроизводительная библиотека .NET с открытым исходным кодом для связи на основе MQTT. Он предоставляет клиент MQTT и сервер MQTT (брокер) и поддерживает протокол MQTT до версии 5. Он совместим с большинством поддерживаемых версий .NET Framework и архитектур ЦП.
Адрес Guthub: https://github.com/dotnet/MQTTnet
MQTTnet поставляется через менеджер пакетов NuGet. Пакет можно найти здесь: https://www.nuget.org/packages/MQTTnet/.
В Visual Studio вручную установите MQTTnet, используя следующую команду в консоли диспетчера пакетов:
Install-Package MQTTnet
Вы можете просмотреть исходный код демо-версии непосредственно на GitHub или загрузить исходный код и использовать Visual Студия открывается,этопредоставил НесколькоSamples
,каждыйSamples
Ниже есть разницаиз Связанные методы,Существуют следующие категории:
Вы можете скачать исходный код, чтобы скомпилировать его и запустить следующим образом:
Как правило, обычное программное обеспечение сервера MQTT включает в себя:
Здесь рекомендуется использовать EMQX, который предоставляет визуальный интерфейс, упрощающий настройку, управление и мониторинг серверов MQTT.
Официальный сайт EMQX предоставляет обширную документацию, адрес быстрого запуска: https://www.emqx.io/docs/zh/v5.2/
Не рекомендуется устанавливать сюда последнюю версию. Рекомендуется понизить версию. Если вы установите последнюю версию emqx-5.3.0-windows-amdx64, она запустится ненормально, как показано ниже:
В этом тесте используется версия emqx-4.4.19-otp24.3.4.6-windows-amd64 следующим образом:
Следуйте инструкциям на официальном сайте, войдите в каталог установки /emqx/bin и используйте следующие инструкции для запуска EMQX:
emqx start
Общие команды запуска EMQX:
"Заказ" | "описывать" |
---|---|
start | Запустите EMQX в режиме демона, во время работы интерактивная оболочка не требуется. |
console | Запустите EMQX в интерактивной оболочке Erlang или Elixir. Используется для отладки EMQX в среде разработки, требующей взаимодействия с EMQX. |
foreground | Запустите EMQX в приоритетном режиме без использования интерактивной оболочки. Используется для запуска EMQX в среде разработки, но не требует фоновой работы. |
stop | Остановите работающий узел EMQX. |
ctl | Для управления и мониторинга EMQX выполните emqx ctl help, чтобы получить более подробную информацию. |
Часто используемые команды EMQX ctl:
"Заказ" | "описывать" |
---|---|
status | Быстро проверьте, работает ли текущий узел. |
broker | Просмотр состояния текущей версии и времени работы текущего узла. |
observer | Может использоваться для просмотра статуса выполнения. Отображает интерфейс, аналогичный команде top в Linux. |
admins | Используется для создания, изменения и удаления учетных записей администратора. |
clients | Просмотр и управление клиентами. |
topics | Просмотр всех подписанных тем в текущей системе. |
subscriptions | Просмотр, добавление или удаление подписок клиента. |
EMQX Dashboard — это встроенное веб-приложение EMQX. Оно поддерживает просмотр общего количества подключений, количества подписанных тем, количества отправленных и полученных сообщений, а также скорости входящего и исходящего потока работающего кластера EMQX. Оно также включает список узлов и. информация об узле и некоторая информация о системных индикаторах. Некоторые данные клиентских подключений и подписки можно просматривать и управлять ими.
если EMQ Если установлено на этом компьютере, используйте браузер, чтобы открыть адрес http://127.0.0.1:18083 , введите имя пользователя по умолчанию admin
с паролем по умолчанию public
, авторизоваться Панель мониторинга, как показано ниже:
если забыл Dashboard Пароль для входа, можете пройти cli из admins
команду сброса, см. командная строка - admins:
./bin/emqx ctl admins passwd <Username> <Password>
MQTTX клиент является кроссплатформенным из MQTT Настольный клиентский инструмент. Он обеспечивает удобный графический интерфейс, позволяющий пользователям быстро создавать, тестировать MQTT Подключитесь и сделайте MQTT Сообщения из публикации и подписки. Адрес загрузки: https://mqttx.app/zh/downloads Интерфейс такой, как показано ниже:
Далее мы используем MQTTnet для написания сервера и клиента для тестирования:
localhost
,「prot」 для 1883
,соединять Служить,Как показано ниже:Теперь, когда подготовка завершена, напишите код для создания и публикации клиента следующим образом:
public static async Task CreatePublishMQTTClient()
{
try
{
MqttFactory mqttFactory = new MqttFactory();
var mqttClient = mqttFactory.CreateMqttClient();
var mqttClientOptions = new MqttClientOptionsBuilder()
.WithTcpServer("localhost", 1883)
.WithClientId("Client1")
.Build();
var connectResult = await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None);
Console.WriteLine("mqttClient connectResult: " + connectResult.ResultCode.ToString());
while (true)
{
var msg = Console.ReadLine();
string topic = "testtopic/publish";
string payload = $"{msg} {DateTime.Now:yyyy-MM-dd HH:mm:ss:fff}"; // Содержание сообщения
var message = new MqttApplicationMessageBuilder()
.WithTopic(topic)
.WithPayload(payload)
.WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce) // Установить качество сообщения
.WithRetainFlag(false) // Стоит ли сохранять сообщение
.Build();
await mqttClient.PublishAsync(message, CancellationToken.None);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
Далее напишите код клиента подписки:
public static async Task CreateSubscribeMQTTClient()
{
try
{
MqttFactory mqttFactory = new MqttFactory();
var mqttClient = mqttFactory.CreateMqttClient();
var mqttClientOptions = new MqttClientOptionsBuilder()
.WithTcpServer("localhost", 1883)
.WithClientId("Client1")
.Build();
mqttClient.ApplicationMessageReceivedAsync += (e) =>
{
Task task = Task.Factory.StartNew(() =>
{
var msgArray = e.ApplicationMessage.Payload;
string result = Encoding.UTF8.GetString(msgArray);
Console.WriteLine("Received: " + result);
});
return task;
};
var connectResult = await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None);
Console.WriteLine("mqttClient connectResult: " + connectResult.ResultCode.ToString());
string topic = "testtopic/subscribe";
var subscribeOptions = new MqttClientSubscribeOptionsBuilder()
.WithTopicFilter(topic)
.Build();
await mqttClient.SubscribeAsync(subscribeOptions);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
Далее напишите консольный метод Main из-за MQTT. ClientМетод асинхронныйиз,Итак, для избегает выхода из консоли,существуют После вызова метода,добавил одинWhile
Бесконечный цикл гарантирует, что консольная программа активна. Код выглядит следующим образом:
static void Main(string[] args)
{
Console.WriteLine("Choose a creation type: \r\n 1: PublishClient\r\n 2: SubscribeClient");
var type = Console.ReadLine();
switch (type)
{
case "1":
_ = CreatePublishMQTTClient();
break;
case "2":
_ = CreateSubscribeMQTTClient();
break;
}
while (true) Thread.Sleep(1000);
}
Сначала протестируйте клиент публикации, выберите PublishClient в консоли, а затем дождитесь подключения. Вы увидите, что результат подключения — «Успешно». Отправьте два тестовых сообщения, и вы увидите, что MQTTX Desktop получает оба.
Затем протестируйте клиент подписки. Выберите SubscribeClient в консоли и дождитесь подключения. Вы увидите, что результат подключения — успешный. Опубликуйте сообщение для клиента подписки в MQTTX Desktop. Вы увидите, что тестовое сообщение получено. в консольной программе.
Вообще говоря,Написано на С# Информации о кодах, связанных с MQTT, пока относительно мало.,Но при хорошем существовании официальная документация достаточно подробная.,Сегодня все еще потребовалось много усилий, чтобы опробовать это. Эта статья служит отправной точкой,Краткое представление о MQTT, легкой коммуникационной платформе.,существования Используйте демо-версию, чтобы углубить свое понимание,Будьте знакомы с тем, как использовать,В конце статьи также представлено множество справочных статей.,Учиться удобно каждому.
❝Справочные ссылки MQTTnet Адрес Guthub: https://github.com/dotnet/MQTTnet MQTT Руководство по началу работы: https://www.emqx.com/zh/mqtt-guide. EMQX Официальная документация: https://www.emqx.io/docs/zh/v5.2/ EMQX командная строка Документация: https://www.emqx.io/docs/zh/v5.2/admin/cli.html EMQX Руководство по настройке: https://www.emqx.io/docs/zh/v5.2/configuration/configuration-manual.html. Основные функции EMQX: https://juejin.cn/post/7081629128650129416. MQTTX Загрузка клиента: https://mqttx.app/zh/downloads ❞