Облегченный протокол связи --- MQTT
Облегченный протокол связи --- MQTT

представлять

「MQTT(Message Queuing Telemetry Transport)」 Это легкий протокол обмена сообщениями, обычно используемый для связи в Интернете вещей (IoT) и сенсорных сетях. Он предназначен для передачи данных через сетевые среды с низкой пропускной способностью, нестабильностью или высокой задержкой, что делает его идеальным для связи между подключенными устройствами, особенно в средах с ограниченными ресурсами.

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

1. Введение в MQTT

「MQTT(Message Queuing Telemetry Transport)」 Это легкий протокол обмена сообщениями, обычно используемый для связи в Интернете вещей (IoT) и сенсорных сетях. Он предназначен для передачи данных через сетевые среды с низкой пропускной способностью, нестабильностью или высокой задержкой, что делает его идеальным для связи между подключенными устройствами, особенно в средах с ограниченными ресурсами.

К основным особенностям MQTT относятся следующие:

  1. Легкий вес: Протокол MQTT сам по себе очень прост.,Заголовки сообщений занимают меньшую пропускную способность,Обеспечьте эффективную работу в сетях с низкой пропускной способностью.
  2. Модель публикации/подписки: MQTT. Использование модели публикации/подписки.,Среди них клиент может подписаться на определенную тему (Topic).,и получать сообщения, связанные с этой темой. Издатель публикует сообщение по определенной теме.,Тогда сообщение получат все подписчики темы изклиент.
  3. Надежность: MQTT поддерживает три различных уровня качества передачи сообщений.,Включает не более одного раза, хотя бы один и только один перевод,Соответствующий уровень можно выбрать в соответствии с требованиями приложения.
  4. Постоянный сеанс: MQTT позволяет клиенту установить постоянный сеанс, чтобы предыдущее состояние подписки и обмена сообщениями могло быть восстановлено, когда существованиесоединять потеряно, а затем повторно соединяться.
  5. QoS(Quality of Service):MQTT Предоставить различные из QoS уровне для обеспечения надежной доставки сообщений. Это включает в себя QoS 0 (не более одной передачи), QoS 1 (минимум одна передача) и QoS 2 (только одна передача).
  6. Адаптивность: MQTT Может работать в различных сетях, в том числе TCP/IP、WebSocket и другие протоколы.

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

2. Механизм QoS 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 0 может привести к потере сообщения, использование QoS 1 может гарантировать, что сообщения будут получены, но сообщения могут повторяться, а использование QoS 2 может гарантировать, что сообщения не будут потеряны или повторены. Изменение уровня QoS от низкого к высокому означает не только повышение надежности сообщений, но и увеличение сложности передачи.

Библиотека .Net для MQTT --- MQTTnet

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, используя следующую команду в консоли диспетчера пакетов:

Язык кода:javascript
копировать
Install-Package MQTTnet

Вы можете просмотреть исходный код демо-версии непосредственно на GitHub или загрузить исходный код и использовать Visual Студия открывается,этопредоставил НесколькоSamples ,каждыйSamplesНиже есть разницаиз Связанные методы,Существуют следующие категории:

  • Client_Connection_Samples ---
  • Client_Publish_Samples
  • Client_Subscribe_Samples
  • Logger_Samples
  • Managed_Client_Simple_Samples
  • PackageInspection_Samples
  • RpcClient_Samples
  • Server_ASP_NET_Samples
  • Server_Diagnostics_Samples
  • Server_Intercepting_Samples
  • Server_Retained_Messages_Samples
  • Server_Simple_Samples
  • Server_TLS_Samples

Вы можете скачать исходный код, чтобы скомпилировать его и запустить следующим образом:

Установка и использование сервера сообщений MQTT под Windows

Как правило, обычное программное обеспечение сервера MQTT включает в себя:

  • 「Mosquitto」 - Популярный инструмент реализации MQTT с открытым исходным кодом,Но нет визуального интерфейса,Для визуализации необходимы дополнительные инструменты.
  • 「EMQX」 - Мощный инструмент реализации MQTT с открытым исходным кодом и визуальным интерфейсом.
  • 「HiveMQ」 - HiveMQ Это коммерческий инструмент MQTT, предоставляющий бесплатную версию для разработчиков.

Здесь рекомендуется использовать EMQX, который предоставляет визуальный интерфейс, упрощающий настройку, управление и мониторинг серверов MQTT.

1. Загрузите EMQX

Официальный сайт 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:

Язык кода:javascript
копировать
emqx start

2. Запустите службу EMQX.

Общие команды запуска 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

Просмотр, добавление или удаление подписок клиента.

3. Панель управления EMQX

EMQX Dashboard — это встроенное веб-приложение EMQX. Оно поддерживает просмотр общего количества подключений, количества подписанных тем, количества отправленных и полученных сообщений, а также скорости входящего и исходящего потока работающего кластера EMQX. Оно также включает список узлов и. информация об узле и некоторая информация о системных индикаторах. Некоторые данные клиентских подключений и подписки можно просматривать и управлять ими.

если EMQ Если установлено на этом компьютере, используйте браузер, чтобы открыть адрес http://127.0.0.1:18083 , введите имя пользователя по умолчанию admin с паролем по умолчанию public , авторизоваться Панель мониторинга, как показано ниже:

если забыл Dashboard Пароль для входа, можете пройти cli из admins команду сброса, см. командная строка - admins:

Язык кода:javascript
копировать
./bin/emqx ctl admins passwd <Username> <Password>

4. Рабочий стол MQTTX

MQTTX клиент является кроссплатформенным из MQTT Настольный клиентский инструмент. Он обеспечивает удобный графический интерфейс, позволяющий пользователям быстро создавать, тестировать MQTT Подключитесь и сделайте MQTT Сообщения из публикации и подписки. Адрес загрузки: https://mqttx.app/zh/downloads Интерфейс такой, как показано ниже:

Написание клиентского кода

1. Подготовительные работы

Далее мы используем MQTTnet для написания сервера и клиента для тестирования:

  1. Создайте новый консольный проект,Добавлена ​​библиотека MQTTnet.
  2. Следуйте приведенной выше команде, чтобы запустить EMQX Служить.
  3. Использование MQTTX Рабочий стол, настройки 「host」 дляlocalhost ,「prot」 для 1883 ,соединять Служить,Как показано ниже:

2. Написание кода

Теперь, когда подготовка завершена, напишите код для создания и публикации клиента следующим образом:

Язык кода:javascript
копировать
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());
    }
}

Далее напишите код клиента подписки:

Язык кода:javascript
копировать
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 Бесконечный цикл гарантирует, что консольная программа активна. Код выглядит следующим образом:

Язык кода:javascript
копировать
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);
}

3. Тест

Сначала протестируйте клиент публикации, выберите 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 ❞

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода