Протокол MQTT 5.0, качество обслуживания QoS
Протокол MQTT 5.0, качество обслуживания QoS

Качество обслуживания

Протокол MQTT определяет качество обслуживания сообщений (Quality of Service), что обеспечивает надежность доставки сообщений в различных сетевых средах. В центре внимания протокола MQTT лежит разработка QoS. Как протокол, специально разработанный для сценариев IoT, сценарии работы MQTT — это не только ПК, но и более широкий спектр сетей с узкой полосой пропускания и устройств с низким энергопотреблением. Если проблему качества передачи можно решить на уровне протокола, это принесет большую пользу. Разработка приложений IoT обеспечивает большое удобство.

Два бита QoS сообщения PUBLISH не могут быть установлены в 1 одновременно [MQTT-3.3.1-4]. Если сервер или клиент получает недопустимое сообщение PUBLISH, в котором оба бита QoS установлены в 1, используйте сообщение DISCONNECT, содержащее код причины 0x81 (недопустимое сообщение), чтобы закрыть сетевое соединение.

Принцип работы

QoS 0 — распространение не более одного раза.

Когда QoS равен 0, распространение сообщений зависит от возможностей базовой сети. Издатель опубликует сообщение только один раз, получатель не ответит на сообщение, а издатель не будет сохранять и повторно отправлять сообщение. Сообщения имеют наибольшую эффективность передачи на этом уровне, но могут быть доставлены один раз или не доставлены вообще.

Qos 1 – раздается хотя бы один раз

Если QoS равен 1, сообщение гарантированно будет доставлено хотя бы один раз. MQTT гарантирует QoS 1 посредством простого механизма подтверждения. Издатель опубликует сообщение и дождется ответа на сообщение PUBACK получателя. Если ответ PUBACK не получен в течение указанного времени, издатель установит для DUP сообщения значение 1 и повторно отправит сообщение. Получатель должен ответить сообщением PUBACK при получении сообщения с QoS 1. Получатель может получить одно и то же сообщение несколько раз. Независимо от флага DUP, получатель будет рассматривать полученное сообщение как новое сообщение и отправлять сообщение PUBACK. ответил.

QoS 2 – однократное распространение

Когда QoS равен 2, издатель и подписчик используют два сеанса, чтобы гарантировать, что сообщение будет доставлено только один раз. Это самый высокий уровень качества обслуживания. Потеря и дублирование сообщений недопустимы. За использование этого уровня качества обслуживания потребуются дополнительные накладные расходы.

После того как издатель опубликует сообщение с QoS, равным 2, он сохранит опубликованное сообщение и будет ждать, пока получатель ответит сообщением PUBREC. После того как отправитель получит сообщение PUBREC, он может безопасно отказаться от ранее опубликованного сообщения, поскольку он уже знает. как его получить Сообщение было успешно получено. Издатель сохранит сообщение PUBREC и ответит сообщением PUBREL, ожидая, пока получатель ответит сообщением PUBCOMP. Когда отправитель получит сообщение PUBCOMP, он очистит ранее сохраненное состояние.

Когда получатель получает сообщение PUBLISH с QoS 2, он обрабатывает сообщение и отвечает сообщением PUBREC. Когда получатель получает сообщение PUBREL, он отбрасывает все сохраненные состояния и отвечает PUBCOMP.

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

Идентификатор пакета

MQTT Соглашение предусматривает, что по одному выпуску за раз QoS > 0 сообщению должен быть присвоен ненулевой идентификатор сообщения, который в данный момент не используется. [MQTT-2.2.1-4]. После обработки подтверждения, соответствующего этому сообщению, идентификатор сообщения освобождается и может быть повторно использован. Определенный идентификатор сообщения не может использоваться несколькими командами в определенное время.

издатели и подписчики

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

Как выбрать качество обслуживания

Чем выше уровень QoS, тем сложнее процесс и больше потребление системных ресурсов. Приложения могут выбирать соответствующий уровень QoS в зависимости от своих сетевых сценариев и бизнес-потребностей. Например, при взаимодействии сообщений между службами в одной подсети часто используется QoS 0, тогда как при передаче сообщений в реальном времени через Интернет часто используется QoS 2; используется. Сценариев относительно немного, и они подходят для более требовательных сценариев, таких как запросы платежей.

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