Протокол MQTT: анализ и практика облегченного протокола связи IoT
Протокол MQTT: анализ и практика облегченного протокола связи IoT

Автор: жаокк

С быстрым развитием технологий Интернета вещей взаимосвязь между устройствами становится все более важной. Для достижения эффективной связи между устройствами появился MQTT (Message Queuing Telemetry Transport) как облегченный протокол связи IoT. В этой статье будет проведен углубленный анализ протокола MQTT, обсуждены его характеристики и сценарии применения, а также использованы примеры кода, чтобы показать, как применять протокол MQTT в реальных проектах.

Что такое протокол MQTT?

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

  • Легкий: MQTT Структура протокола проста, издержки заголовка сообщения невелики, и он подходит для работы на устройствах с ограниченными ресурсами.
  • Режим публикации/подписки: Устройства могут публиковать сообщения в определенных темах, а другие устройства могут подписываться на интересующие темы для обеспечения несвязанной передачи сообщений.
  • Будет механизм: Устройство может указать сообщение о волеизъявлении. При аварийном отключении устройства оно отправит сообщение о волеизъявлении для уведомления других устройств.
  • Сохранить сообщение: MQTT Сервер может хранить последние сохраненные сообщения, которые можно получить немедленно при подключении нового подписанного устройства.
  • Уровень QoS (качество обслуживания): MQTT Поддерживаются три различных уровня качества доставки сообщений: от однократной доставки до гарантированно однократной доставки.

Сценарии применения MQTT

Протокол MQTT имеет широкий спектр сценариев применения в Интернете вещей, включая, помимо прочего:

  1. Умный дом: MQTT Его можно использовать для соединения различных устройств в умных домах, таких как умные светильники, датчики температуры и т. д. Устройства могут публиковать свой статус в определенных темах, а пользователи могут подписываться на эти темы, чтобы получать информацию об устройстве.
  2. Промышленная автоматизация: В промышленных условиях различные датчики и оборудование требуют связи в реальном времени для мониторинга и управления производственными линиями. MQTT Обеспечивает эффективный метод связи, обеспечивающий надежность и надежность взаимодействия между устройствами в режиме реального времени.
  3. Логистика и транспорт: В сфере логистики и транспорта MQTT Его можно использовать для отслеживания местоположения транспортного средства, статуса груза и другой информации в режиме реального времени, а также для предоставления точных услуг по отслеживанию логистики.
  4. Сельское хозяйство: Сельскохозяйственный Интернет вещей может быть достигнут посредством MQTT Подключайте датчики и контроллеры для мониторинга посевов и управления орошением.

Анализ структуры протокола MQTT

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

  • Сообщение запроса на подключение: Клиент отправляет серверу сообщение запроса на соединение, включая идентификатор клиента, флаг и другую информацию.
  • Ответное сообщение о соединении: Сервер отвечает на сообщение запроса на соединение, включая подтверждение соединения, код возврата и другую информацию.
  • Опубликовать сообщение: Клиент публикует сообщение в указанной теме и может выбрать, сохранять ли сообщение и уровень качества сообщения.
  • Подпишитесь на сообщения: Клиент отправляет на сервер сообщение с запросом на подписку, указывая тему на подписку и уровень качества сообщения.
  • Сообщение об отказе от подписки: Клиент отправляет серверу сообщение с запросом на отмену подписки, чтобы отказаться от подписки на определенную тему.
  • Сообщение пульса: Поддерживайте состояние соединения между клиентом и сервером, чтобы предотвратить разрыв соединения из-за тайм-аута.

Практические примеры MQTT

Ниже приведен простой пример кода Java, который показывает, как использовать клиентскую библиотеку Eclipse Paho MQTT для подключения к серверу MQTT, а также публикации сообщений и подписки на них.

Язык кода:java
копировать
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

public class MqttDemo {

    public static void main(String[] args) {
        String broker = "tcp://iot.eclipse.org:1883";
        String clientId = "SampleClient";
        MemoryPersistence persistence = new MemoryPersistence();

        try {
            MqttClient client = new MqttClient(broker, clientId, persistence);
            MqttConnectOptions connOpts = new MqttConnectOptions();
            connOpts.setCleanSession(true);

            System.out.println("Connecting to broker: " + broker);
            client.connect(connOpts);
            System.out.println("Connected");

            String topic = "test/topic";
            String content = "Hello, MQTT!";
            int qos = 2;

            System.out.println("Publishing message: " + content);
            MqttMessage message = new MqttMessage(content.getBytes());
            message.setQos(qos);
            client.publish(topic, message);
            System.out.println("Message published");

            client.subscribe(topic, (topic1, msg) -> {
                System.out.println("Received message: " + new String(msg.getPayload()));
            });

            // Simulate keeping the connection alive
            Thread.sleep(5000);

            client.disconnect();
            System.out.println("Disconnected");
        } catch (MqttException | InterruptedException me) {
            me.printStackTrace();
        }
    }
}

Подвести итог

Будучи облегченным протоколом связи IoT, протокол MQTT прост, эффективен и надежен и подходит для различных сценариев приложений IoT. Благодаря модели публикации/подписки и поддержке нескольких уровней качества обслуживания MQTT может удовлетворить потребности связи между различными устройствами. В реальных проектах мы можем быстро создать стабильную версию, используя клиентские библиотеки MQTT, такие как Eclipse Paho.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose