Почему в наши дни в каждом резюме Android написано «Знаком с протоколом MQTT»?
Почему в наши дни в каждом резюме Android написано «Знаком с протоколом MQTT»?

Ставьте лайк и подписывайтесь, ваша поддержка очень много значит для меня. 🔥 Привет, я Сяо Пэн. Эта статья была включена в GitHub · AndroidFamily[1] середина.


Предисловие

Привет всем, меня зовут Сяо Пэн.

MQTT является издательской базой - Модель подпискиновостипередачапротокол,Существующие IoT и мобильные приложения имеют более широкий спектр применения. Если ваша цель — занять должность инженера среднего и старшего уровня,MQTT Возможно, хорошая изюминка. Недавно я также обнаружил, что многие кандидаты пишут себя в своих резюме. "привычный MQTT Соглашение», но большинство людей только понимают или использовали его.

В этой статье я обсужу с вами MQTT согласованный Принцип работы & Формат сообщения протокола & основнойхарактеристика,О практической части мы поговорим в следующей статье. Если я могу помочь,Обязательно поставь лайк и добавь внимание,Дайте Сяо Пэну немного творческой мотивации.


Дорожная карта обучения:


1. Познакомьтесь с MQTT

1.1 Что такое MQTT?

MQTT (Message Queuing Telemetry Транспорт, телеметрия очереди сообщений) это своего рода TCP/IP Протокол прикладного уровня семейства протоколов. MQTT протокол специально предназначен для оборудования с низкой производительностью & Разработан для сценариев с нестабильными условиями сети, что делает MQTT Он широко используется в ограниченных сценариях, таких как Интернет вещей и мобильные приложения.

1.2 История развития протокола MQTT

  • 1999 Год: Энди Stanfork-Clark (IBM) и Arlen Nipper выпускать Протокол MQTT,используется для Подключение систем телеметрии нефтепровода через спутник, MQTT серединаиз TT (Telemetry Transport) Просто да возникла из этой одной телеметрической системы;
  • 2010 Год:Протокол MQTTбесплатновыпускать;
  • 2014 Год:Протокол MQTT официально становится OASIS Стандарт, разрабатывавшийся в течение многих лет, Протокол MQTT стал Интернетом (IoT) из Один из основных протоколов.

В настоящее время MQTT в основном разделен на две основные версии:

  • MQTT v3[2]: в v3.1.1 да Самая распространенная версия, наша практическая статья также основана на версии протокола;
  • MQTT v5[3]: 2018 Год выпуска, в настоящее время имеет ограниченное применение.

1.3 Рабочая модель протокола MQTT

MQTT основано на публикации - Модель подписки (pub/sub) Протокол обмена сообщениями с запросами - Модель ответа другая, релиз - Модель подписки Есть три основные роли:publisher & subscriber & subscriber

  • publisher & subscriber (выпускать ВОЗ & Подписчик): дачерез Интернет Подключиться к MQTT broker оборудование, также называемое **Клиент (клиент)**. один клиент может быть либо для информационнойвыпуска, либо для информационной подписки;
  • маклер: актерское мастерстводавесьвыпускать - Модель подпискиизкоре, также называемый Сервер

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

выпускать - Модель подписки позволяет информацияизвыпускать ВОЗиподписка ВОЗ解耦,Основные проявлениядляпространственная развязкаи Развязка по времени:

  • Пространственная развязка/развязка устройств: выпускать ВОЗиподписка ВОЗ通过 broker 进行информацияпередача,Нет взаимного восприятия друг друга. Когда клиент «когдаодин» отключен,Вся система может продолжать работать;
  • Развязка по времени: publisher и subscriber Они не обязательно должны работать одновременно;

Изображение цитируется по https://juejin.cn/post/6976441705067184135[4] —— cxuan С

1.4 В чем разница между протоколом MQTT и протоколом HTTP?

характеристика

Протокол MQTT

HTTP-протокол

транспортный уровень

TCP

TCP или UDP

модель распределения

выпускать - Модель подписки

Модель запрос-ответ

Отношения распределения

1 пара 0/1/Н

1 к 1

Безопасность данных

Используйте SSL/TLS

Не обязательно HTTPS

шифрование

Прикладной уровень надежно шифрует полезную нагрузку

Нетсуществовать Прикладной уровеньшифрование

Размер заголовка сообщения

меньше

Больше

  • 1、Протокол MQTT基Втранспортный уровень TCP соглашение, в то время как HTTP может быть основано на TCP или UDP(HTTP/3);
  • 2、Протокол MQTTиспользоватьвыпускать - Модель подписка, одно и то же устройство может быть либо давы отпускающей, либо даподпиской; HTTP-протоколиспользовать Модель запрос-ответ, одно оборудование используется в качестве стороны запроса, а другое оборудование используется в качестве ответчика;
  • 3、MQTT распространение информации может да 1 пара 0/1/Н, в то время как HTTP информацияраспределениеда 1 к 1;
  • 4、Протокол MQTTИспользуйте SSL/TLS для обеспечения безопасности и HTTP-протоколи Нет规定использовать HTTPS;
  • 5、Протокол MQTTсуществовать уровень приложения верно Полезная нагрузка (payloads) шифрование,и HTTPS протокол Нетсуществовать Прикладной уровеньшифрование,существоватьпередача данным об инфекции не будет предшествовать данные шифрования;
  • 6、MQTT информацияголоваменьше,и HTTP информацияголова Больше(HTTP/2 при сжатии головы);

1.5 Почему протокол MQTT подходит для сценариев Интернета вещей и мобильных приложений?

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

  • 1. Архитектурный проект: Протокол MQTTиспользоватьвыпускать - Модель подписки, чтобы информациявыключения и иинформационная подписка были отделены друг от друга. Когда один клиент отключен, вся система может продолжать работать. Это делает MQTT существование имеет больше преимуществ в качестве сети из сценариев;
  • 2. Размер сообщения: Протокол В MQTT очень маленький заголовок новостей, поэтому Протокол MQTT больше подходит для сетевых сред с низкой пропускной способностью;
  • 3. Возможность доставки: Протокол MQTT предоставляет более широкие возможности обеспечения доставки, которые определяют три типа качества обслуживания. (QoS):“Отправляйте максимум один раз”、“Отправьте хотя бы один раз” и “Отправлено ровно один раз".в,"ровно один раз" используется для Биллинговой системыи IM App Во время отправки он может гарантировать, что пользователи получат его только один раз;
  • 4. Прерывистое соединение: MQTT Предлагается информацияибронироватьинформациюхарактеристика. Будет ли информация позволять клиенту получать новости о прибытии от прокси-сервера при отключении клиента; ватьинформация означает, что новые подписавшиеся клиенты могут мгновенно получать бронировки (аналогично «Прикрепленной информации»). Это делает Протокол MQTT больше подходит для нестабильной сети из-за Сценарии прерывистого подключения.

1.6 Кому больше подходит Интернет вещей (HTTP/2 & WebSocket & MQTT)?

  • HTTP/2 да HTTP/1.x из Модернизация, в основном отражающаяся на существовании: утилизация «Мультиплексирование и двоичный кадринг» Решить проблему блокировки заголовка очереди и уменьшить задержку связи; «Сжатие головы» Уменьшенная информационная головка, пониженная передача реализована инфекция; push-уведомление сервера,Разрешить существующую передачу данных приезжающему клиенту без инициации проситьиз,восполнено Http/1.x полагаться Websockets Чтобы реализовать толчок из-за дефекта. Эти улучшения позволяют HTTP/2 Он также подходит для сценариев и условий Интернета вещей;
  • WebSockets дасуществовать Web Браузер и Web Между серверами выполняется рукопожатие, что снижает Http/1.x Выполните дуплексную связь из-за служебных данных. вместе с HTTP/2 в стандартный,верно websockets из Спрос может снизиться;
  • MQTT основано на публикации Модель подпискиизпротокол,потому что его потребление полосы пропускания невелико, и он широко используется. для IoT протокола.

Вывод: среди этих трех протоколов нет абсолютного победителя, а лучший протокол зависит от конкретных потребностей и ограничений. Но если мы посмотрим только на основные условия пропускной способности, батареи и функционального разнообразия, MQTT Среди них есть более доминирующий выбор. Например,наш IM Продукты в App Конец принят MQTT согласованныйвыполнить,исуществовать Web Потому что есть хорошие WebSocket основе способностей, поэтому WebSocket передача инфекции MQTT отформатировать сообщение.

1.7 Почему протокол MQTT основан на TCP? Может ли он быть основан на протоколе UDP?

MQTT Согласованная расчетная характеристика содержит элемент «Доставка с высокой надежностью», требуется обеспечить надежность базовой транспортной системы. уровеньпротокол,потому чтоэтот TCP Протокол, TLS Протокол,вебсокет соглашение может быть таким MQTT базовый протокол. без связи UDP Протокол потеряет или переупорядочит данные и не сможет удовлетворить MQTT согласованныйпередача инфекциинуждаться。


2. Формат сообщения протокола MQTT.

2.1 Характеристики сообщений протокола MQTT

  • 1. На основе двоичного кода: MQTT это своего родадвоичныйизпротокол,так называемый на основе двоичного кода,даобратитесь к Протокол MQTT работает с элементами двоичных данных, а не с текстовыми данными;
  • 2. Команда & Формат подтверждения команды: MQTT Сообщение принимает команду & Подтверждение команды из формата, каждая информация о команде имеет одну ассоциацию с информацией о подтверждении команды, две информации пройдут один «Уникальный идентификатор пакета» Поля для ассоциации? ? ? ТОДО. Это связано с TCP Механизм ответа на подтверждение сообщения аналогичен MQTT, но степень детализации у них разная. даверно вся информация прикладного уровня подтверждена, и TCP давернотранспортный уровень сегмента сообщения из подтверждения или указанный даверно порядковый номер подтверждения;
  • 3. Заголовок сообщения очень маленький: MQTT Минимальный требуемый заголовок сообщения составляет только 2 байт。

2.2 Базовая структура сообщений протокола MQTT

Сообщение MQTT состоит из трех частей:

Структура сообщения MQTT

описывать

длина

Фиксированный заголовок

Присутствует во всех сообщениях MQTT.

от 2 до 5 байт

Переменный заголовок

Присутствует в некоторых сообщениях MQTT.

0 или N байт

Полезная нагрузка

Присутствует в некоторых сообщениях MQTT.

0 или N байт

1. Фиксированный заголовок

все MQTT Сообщения содержит фиксированный заголовок, фиксированный заголовок по типу Состоит из трех частей: сообщения, флаг и оставшаяся длина. Фиксированная длина заголовкадля 2 ~ 5 байт, в зависимости от “Оставшийсядлина(Remaining Length)” по размеру,Оставшаяся длина означает оставшуюся часть прежнего номера избайта.,Включает переменный заголовок, полезную нагрузку и здлина.,Но оно не включает в себя оставшееся поле длины из байта.

намекать: Как определить количество оставшейся длиныизбайт, используя однозначную из обозначений префикс изда.

Фиксированный формат заголовка следующий:

Тип сообщения MQTT (тип пакета управления MQTT) описывается следующим образом:

Тип сообщения

ценить

Направление потока сообщений

описывать

требуется полезная нагрузка

Reserved

0

запретить

бронировать

/

CONNECT

1

=>

Клиент запрашивает соединение с сервером

CONNACK

2

<=

Подтверждение сообщения CONNECT

PUBLISH

3

<==>

Опубликовать информацию о клиенте

Необязательный

PUBACK

4

<==>

ПУБЛИКОВАТЬ подтверждение сообщения (QoS 1)

PUBREC

5

<==>

выпуститьReceive прибытиять (первый шаг для обеспечения доставки)

PUBREL

6

<==>

выпусквыпуск (гарантированная доставка, второй шаг)

PUBCOMP

7

<==>

выпускComplete (гарантированная доставка, шаг 3)

SUBSCRIBE

8

=>

Клиент подписывается на сообщения

SUBACK

9

<=

ПОДПИСАТЬСЯ, подтверждение сообщения

UNSUBSCRIBE

10

=>

Клиент отписывается

UNSUBACK

11

<=

UNПОДПИСАТЬСЯ, подтверждение сообщения

PINGREQ

12

=>

запрос пульса

PINGRESP

13

<=

PINGREQ Подтверждение сообщения

DISCONNECT

14

=>

Клиент отключается

Reserved

15

запретить

бронировать

/

2. Переменный заголовок

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

  • Идентификатор пакета: SUBSCRIBE,UNSUBSCRIBE,PUBLISH(QoS > 0)из В сообщениибудет содержатьодин 2 байтиз однозначно идентифицирует поле каждый раз client Отправить Этой информации должен быть присвоен уникальный идентификатор. И эти информаиз реагируют на информацию, как PUBACK、PUBREC、PUBREL、UNSUBACK Должен иметь тот же уникальный идентификатор, что и верная информация.

3. Загрузка

Некоторые сообщения MQTT содержат полезные данные. Для сообщений PUBLISH полезными данными являются сообщения приложения.


3. Подробное объяснение типов сообщений протокола MQTT.

В предыдущем разделе мы упоминали, что MQTT Фиксированные заголовки сообщений будут отмечены MQTT Тип сообщения(MQTT Control Packet type) , в этом Фестивале давайте обсудим эти типы подробно. сообщения。

3.1 Сообщение о соединении

MQTT Соединение всегда происходит в client и broker между, два client Они не будут воспринимать друг друга. При запросе соединения клиент Пойду в broker отправлять CONNECT Сообщение о соединении, брокер Ответим после подтверждения соединения CONNACK Сообщение о подтверждении подключения. После того как соединение установлено, оно остается открытым до тех пор, пока client отправлять DISCONNECT отключитьсясообщение о соединенияииили Соединение было нештатно прервано.

Соединение запроса CONNECT:

CONNECT да client отправлять Давать broker первое сообщение и в соединении клиент Отправлять только один раз CONNECT информация,отправитьиз Второго CONNECT Сообщение будет broker Считайте это нарушением протокола и отключитесь. существовать CONNECT В ., в основном включает в себя следующее содержимое:

  • Имя клиента ClientId: все client Всем нужно имя, брокер будет основано на client имя для отслеживания сеанса, поэтому client Имя должно быть да только。если Подключиться к broker Уже есть человек с таким именем как одиниз clientId, затем существующий client из соединения, что может привести к отключению из бесконечного цикла, потому что чтодлямост MQTT client Имеется механизм отключения и повторного подключения;
  • CleanSession постоянный сеанс: когда client Подключиться к broker час,Можно использовать постоянное или непостоянное соединение.,CleanSession Флаг определяет, будет ли использоваться постоянное соединение (когда CleanSession = 0 означает постоянное соединение), постоянно в постоянном состоянии сеанс,broker Состояние сеанса будет сохранено для непостоянных сеансов, брокер; не будет храниться client любой контент,Подробности см. в разделе 4.2 · Статус сеанса;
  • UserName & Password имя пользователя & пароль: используется для broker Аутентификация и авторизация;
  • Интервал проверки активности KeepAlive: KeepAlive да — интервал времени в секундах и относится к client Максимальный интервал времени между двумя сообщениями client и borker между Если в течение определенного периода времени нет взаимодействия с данными, клиент встречаотправлять Сообщение проверки PINGREQ используется для Определить соединениеда Это нормально?,решить, следует ли закрывать соединение。KeepAlive да MQTT согласованный механизм поддержания активности, от функции зависит TCP из Keepalive Механизм поддержания активности очень похож на из, но MQTT согласованный механизм поддержания активности на уровне приложения client осознавать, в то время как TCP из Механизма поддержания активности "ядро" Осознайте из.
  • Сообщение о последней воле Сообщение о последней воле: воляинформацияиспользуется для Уведомление о неожиданном выключениииз клиент, каждый client существование может быть установлено при подключении одного будет информация, это будет информация будет хранилищесуществовать broker начальство.когда client потому что «Ненормальные причины» При отключении брокер Распространю информацию по подписке “Will” темаиз client。кроме того,这条воляинформация Вы также можете установитьданетдлябронироватьинформация(Will Retain логотип) и Уровень качества обслуживания(Will Qos)。

Подтверждение подключения CONNACK:

CONNACK сообщение для подтверждения CONNECT информация.CONNECT да client отправлять Давать broker Первое сообщение соответственно брокера отправлять Давать client из Первая информация должна быть да CONNACK информация. существовать CONNACK В ., в основном включает в себя следующее содержимое:

  • SessionPresent постоянный сеанс: SessionPresent Знак означает «когда фронт» broker да Нет, держится client изпостоянный сеанс。когда broker Получен один непостоянный сеанссоединять(CleanSession = 1),SessionPresent изценитьвсегдадля 0;икогда broker Получен одинпостоянный сеанссоединять(CleanSession = 0),но SessionPresent ценить зависит broker данетхранилище Понятно ClientId изсостояние сеанса;
  • Код ответа ReturnCode: используется для указывает, успешно ли установлено соединение с проситьда, если код ответа не для 0 означает, что соединение не удалось.

Конкретный выбор цен таков:

код возврата

описывать

0

Соединение принято

1

В соединении отказано, недопустимая версия протокола

2

Соединение отклонено, идентификатор отклонен

3

Соединение отклонено, сервер недоступен

4

Соединение отклонено,имя Неправильный пароль для пользователяили

5

Соединение отклонено, несанкционировано

ОТКЛЮЧИТЬ Отключить:

DISCONNECT Новости по client отправлять Давать broker,используется дляотключитьсясоединять。Информация DISCONNECT отсутствует заголовок переменной и полезная нагрузка,Информация об ответе-подтверждении отсутствует.,Указывает на чистую операцию отключения.。отключитьсясоединятьназад,client Больше нельзя удалить CONNECT Новости за пределами новостей, брокер Также необходимо отбросить информацию о времени предыдущего сеанса.

3.2 Подписаться на сообщения

MQTT основано на публикации Модель подпискиизпротокол,существовать После установления связи,client Вы можете спросить broker подписка заинтересована в изодинили несколько тем.

3.2.1 ПОДПИСАТЬСЯ Подписка

SUBSCRIBE Новости по client отправлять Давать broker,используется для подпискиинтересные изтемы,SUBSCRIBE В основном сообщение содержит следующее содержание:

  • список тематических фильтров: SUBSCRIBE информацияиз Полезная нагрузка должна содержать как минимум один фильтр тем, каждый фильтр состоит из одного Topic и QoS Состав, а именно QoS назначенный назначенный client Принять измакс OoS оценка.

3.2.2 Подтверждение подписки на СУБАКТ

SUBACK сообщение для подтверждения SUBSCRIBE информация.SUBACK В основном сообщение содержит следующее содержание:

  • код возвратасписок: каждый код возврата Все с SUBSCRIBE В Фильтры тем WPиз доступны один за другим.

Конкретный выбор цен таков:

код возврата

описывать

0x00

Подписка прошла успешно, максимальное качество обслуживания равно 0.

0x01

Подписка прошла успешно, максимальное значение QoS – 1.

0x02

Подписка прошла успешно, максимальное значение QoS – 2.

0x80

Подписка не удалась

3.2.3 ОТПИСАТЬСЯ Отменить подписку

UNSUBSCRIBE Новости по client отправлять Давать broker,используется для Отписаться Нетзаинтересованныйизтема,UNSUBSCRIBE В основном сообщение содержит следующее содержание:

  • Список тем: UNSUBSCRIBE информацияиз Полезная нагрузка должна содержать хотя бы одну тему.

3.2.4 UNSUBACK Подтверждение отмены подписки

UNSUBACK сообщение для подтверждения UNSUBSCRIBE информация.UNSUBACK Сообщение очень простое, содержит только уникальный идентификатор пакета (расположенный в заголовке переменной).

3.3 Публикация новостей

когда MQTT client Во время подключения к broker Затем вы можете отправитьинформацию, каждый PUBLISH Сообщения содержат topic ,broker будет основано на topic Отправить информациюотправлять заинтересованным из клиент. Кроме того, каждое сообщение содержит Payload,Payload даTrue выдача информации приложения, полезная нагрузка содержимого и формата определяется уровнем приложения, протоколом Уровень MQTT не волнует.

3.3.1 PUBLISH выпускать

PUBLISH Сообщения можно отправлять через client отправлять Давать брокер или через broker отправлять Давать клиент, используемый для транспортировки сообщений прикладного уровня. ПУБЛИКОВАТЬ В основном сообщение содержит следующее содержание:

  • QoS выпускать Знак качества обслуживания: отметкакогдавперед PUBLISH информация Передачаиз Гарантированный уровень доставки,Разделен на три уровня,Конкретный вид 4.3 Фестиваль · выпускать Качество обслуживания
    • Качество обслуживания 0 (по умолчанию): Отправляйте максимум один раз
    • QoS 1: Отправьте хотя бы один раз
    • QoS 2: Отправлено ровно один раз
  • RETAIN бронироватьинформациялоготип: отметкакогдавперед PUBLISH информацияданетдлябронироватьинформация,когда client отправлять Давать broker из PUBLISH информацияотметка RETAIN = 1 Когда, брокер встречахранилище Долженинформация,когдановыйиз клиента при регистрации подписки,И при сопоставлении информационной темы,Долженбронироватьинформациявстречаотправлять Даватьподписка ВОЗ,Конкретный вид 4.4 Фестиваль · бронироватьинформация;
  • Флаг повторной передачи DUP: отметкакогдавпередиз PUBLISH / PUBREL информацияданетдляповторитьотправлятьинформация. Протокол MQTT определяет два типа Повторной передача сообщенияизсцена,Конкретный вид 4.5 Фестиваль · ретрансляция сообщения;
  • Название темы Название темы: Представляет извыпускающий канал полезных данных;
  • Уникальный идентификатор пакета: только QoS1 и OoS2 из PUBLISH В сообщениижитьсуществовать;
  • Полезная нагрузка (сообщение приложения): PUBLISH информацияизнагрузкадаTrue выдача информации приложения, полезная нагрузка содержимого и формата определяется уровнем приложения, протоколом Уровень MQTT не волнует. Кроме того, длина полезных данных равна: оставшейся длине в фиксированном заголовке (Remaining Lenght)- Переменная длина заголовка, длина полезной нагрузки также может быть равна нулю.

3.3.2 выпускатьподтверждать

PUBLISH информацияиз Получатель требует отправить ответ на подтверждение, другое QoS иерархический PUBLISH Ответ на сообщение отличается:

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

ожидаемый ответ подтверждения

QoS 0

Нет подтверждения

OoS 1

ПУБАК-сообщение

OoS 2

Сообщение PUBREC Сообщение PUBREL Сообщение PUBCOMP

3.4 Обнаружение пульса Ping

когда client и broker Если в течение определенного периода времени нет взаимодействия с данными, клиент встречаотправлять PINGREQ зондовое сообщение,используется для определяет, является ли соединение нормальным, и решает, следует ли да закрыть соединение. MQTT согласованный Механизм поддержания активности。

3.4.1 Сообщение об обнаружении PINGREQ

PINGREQ Новости по client отправлять Давать broker。

3.4.2 Подтверждение обнаружения PINGRESP

PINGRESP Новости по broker отправлять Давать клиент, представитель client дажить活из。


4. Основные функции протокола MQTT

4.1 Темы и фильтры тем

MQTT тема по сути да своего рода «форма обращения»,используется для распространения прикладного уровня информации о прибытии клиентов. MQTT темада Иерархическая структура, подобная файловой системе,использовать “/” косая черта в качестве разделителя.

4.1.1 Спецификации формата темы

  • 1. С учетом регистра;
  • 2. Принять кодировку UTF-8 из строки;
  • 3. Чтобы непустая строка была допустимой, она должна содержать хотя бы один символ;
  • 4. Может содержать пустое;
  • 5. Увеличение одной темы “/” Префикс или и суффикс да отличаются от темы.

4.1.2 Подстановочные знаки тем

Когда клиент подписывается на тему, он может подписаться на определенную тему (например, "группа/группа123"), вы также можете использовать "Подстановочный знак" 来同часподписка Несколькотема。нуждаться注意изда:существоватьвыпускатьинформациячас Нет允许использоватьтема Подстановочный знак,client Каждый выпуск информации может быть выпущен только по одной теме.

  • Подстановочный знак одного уровня: + да одноуровневый подстановочный знак, можно использовать одноуровневый подстановочный знак для любого уровня одной темы, но может соответствовать только одному уровню. Например:

тема

Пример соответствия темы

group/+/123

group/vip/123group/temp/123

  • Многоуровневые подстановочные знаки: # да Многоуровневый подстановочный знак, многоуровневый подстановочный знак может соответствовать нескольким последовательным уровням. Следует отметить, что многоуровневые подстановочные знаки могут использоваться только в качестве длятемаиз последнего 1 уровня. Например:

тема

Пример соответствия темы

group/#

groupgroup/123group/vip/123group/temp/123

4.1.3 $SYS тема

SYS темада broker По умолчанию брокер создается только для чтения. Кроме того, брокер. По умолчанию ни одна тема не создается, все темы да создаются только клиентом, подписавшимся или выключающимся из, ни одна тема да не является постоянной. о SYS темаиз Подробнее введениесуществовать здесь[5]

4.1.4 темаизжизненный цикл

  • Создать тему: подписка определенного клиента на эту тему,или ВОЗ какой-то клиент передает информацию,Также установите длябронироватьинформацию;
  • Удалить тему: Клиент отключен от последней ноды подписки, при этом подключение непостоянное (CleanSession=1).

4.2 Состояние сеанса

когда client Подключиться к broker Когда вы можете использовать постоянное или непостоянное соединение, это можно сделать через CONNECT В сообщениииз CleanSession Флаг для принятия решения из(когда CleanSession = 0 указывает на постоянное соединение). Для постоянных сеансов брокер Состояние сеанса будет сохранено для непостоянных сеансов, брокер; не будет храниться client любого содержания. Статус сеанса в основном включает в себя следующее содержимое:

4.2.1 Состояние сеанса, сохраненное на стороне клиента

  • ужеотправлять broker Но подтверждения от «Приехатьиз» получено не было. QoS 1 и QoS 2 PUBLISH информация;
  • от broker Получено, но еще не получено подтверждение о прибытии. QoS 2 PUBLISH информация.

4.2.2 Состояние сеанса, хранящееся на стороне сервера

  • клиентская изподписка;
  • ужеотправлятьприезжать client из Но нет подтверждения от прибытияиз QoS 1 и QoS 2 PUBLISH информация;
  • от Клиент получен, но еще не подтвержден из QoS 2 PUBLISH информация;
  • ждатьотправлятьприезжать client из QoS 1 и QoS 2 PUBLISH информация;
  • (Необязательныйэлемент)ждатьотправлятьприезжатьклиентиз QoS 0 PUBLISH информация.

намекать: бронироватьинформация Нет属Всостояние сеанса, существование не будет удалено после завершения сеанса, брокер просмотры шражухранилищбронировать прямойприезжать коз client удалить.

4.3 QoS публикует уровни качества обслуживания

  • Качество обслуживания 0 (по умолчанию): Отправляйте максимум один раз (доставка не гарантируется)
  • QoS 1: Отправьте хотя бы один раз (Гарантированная доставка информации, но могут возникнуть дубликаты)
  • QoS 2: Отправлено ровно один раз (гарантия отсутствия повторной доставки новостей)

QoS 0 иерархический PUBLISH информацияиз Возможности доставки полностью опираются на нижний транспортный уровень,QoS 1 и QoS 2 Уровни начинают повышаться на прикладном уровне. PUBLISH информацияиз Возможности доставки. Если информация о моменте потеряна, окончание отправки будет повторено раньше, чем отправлено из PUBLISH Сообщение (ДУП = 1), получатель получает информацию о прибытии, а также отправляет подтверждающую ответную информацию.

4.3.1 QoS 0 · Отправка не более одного раза

существовать QoS 0 изиерархический PUBLISH В сообщении Нет包含包唯一标识。отправлять ВОЗНет考虑информация Достигайте результатов,Ресивер тоже не отвечает. Получатель может получить информацию о прибытии не более одного раза.,Также возможно, что вам не удастся собрать приезжать сразу.

4.3.2 OoS 1 · Отправить хотя бы один раз

существовать QoS 1 иерархический PUBLISH В Почта содержит уникальный идентификатор посылки, при отправке всегда будет использоваться эта информация. «Не подтверждено» сообщение до соответствующего PUBACK Подтвердите сообщение. Конкретный поток сообщений выглядит следующим образом:

намекать: 实际новостипередачадасуществовать client и broker осуществляется между 4 Эти шаги упрощают передачу отправка между сторонами и получателями.

  • 1、отправлятьнаправлениехранилищеприложениеинформация;
  • 2、отправлятьнаправлениеотправлять PUBLISH(QoS = 1, DUP = 0, <PID>)информация;
  • 3. Получатель получает PUBLISH сообщение и ответить на PUBACK(<PID>)подтверждатьинформация;
  • 4、отправлятьнаправление收приезжать PUBACK информацию и удалить информацию о приложении без сохранения.

4.3.3 QoS2 · Отправляется ровно один раз

QoS 2 да Высочайшее качество обслуживания, гарантирующее, что информация не будет потеряна или дублирована, недостаток да увеличит стоимость. существовать QoS 2 иерархический PUBLISH В .. содержит уникальный идентификатор пакета, который всегда будет использоваться при отправке. «Не подтверждено» сообщение, пока не получите соответствующее PUBCOMP Подтвердите сообщение.

  • 1、отправлятьнаправлениехранилищеинформация;
  • 2、отправлятьнаправлениеотправлять PUBLISH(QoS = 2, DUP = 0, <PID>)информация;
  • 3. Получатель получает PUBLISH информация,ихранилищеинформация;
  • 4. Ответ получателя PUBREC(<PID>)информация;
  • 5、отправлятьнаправление收приезжать PUBREC информация,иотправлять PUBREL(<PID>)информация;
  • 6. Получать уведомления от приложений верхнего уровня;
  • 7. Ответ получателя PUBCOMP(<PID>)информация;
  • 8、отправлятьнаправление收приезжать PUBCOMP информацию и удалить информацию о приложении без сохранения.

4.4 RETAIN сохраняет сообщения

когда client выпускатькто-тотемановости Когда, брокер распространим эту информацию среди всех, кто подписался на эту темуиз клиент, то это сообщение будет отправлено с broker Можно установить на удалении. RETAIN бронировать логотип установить PUBLISH информациядлябронироватьинформация,broker встреча хранит информацию о последнем бронировании, когда это было в последний раз? client 注册подпискачас,И при сопоставлении информационной темы,Долженбронироватьинформациявстречаотправлять Даватьподписка ВОЗ。Нужно обратить внимание на: брокера Только для каждой темы сохранится последняя бронироватьинформация, новый сборник приезжатьиз RETAIN = 1 новости будут освещать оригинальную бронировать информацию;

постоянный сеанс & Уровень качества обслуживания & бронироватьинформация都встреча影响новыйподписка ВОЗданет接受информация,Подвести Итог Следующая таблица:

  • верно в бронироватьинформацию (Retain Flag for Ture), новая подписка всегда может получить последнюю бронинформацию (зеленая часть на картинке);
  • верно Впостоянный сеанс(Clean Session Flag для Ложь) иsubscriptionВОЗподписка OoS Больше или равно 1. Всегда получайте жильевсе OoS Больше или равно 1 новости (желтая часть на картинке).

4.5 Ретрансляция сообщения

отметка DUP = 1 новостида被повторитьотправлятьновости,MQTT Повторная передача сообщения имеет 2 Сценарий:

  • 1、PUBLISH / PUBREL информацияотправлятьназад,существуют В течение указанного времени ответ о подтверждении прибытия не был получен.,Затем повторно передайте эту информацию;
  • 2、существоватьиспользоватьпостоянный сеанс, клиент После повторного подключения брокер Неподтвержденные сообщения будут автоматически отправлены повторно.

На что следует обратить внимание: DUP Логотип правильный OoS > 0 новостиэффективный,все QoS = 0 новости DUP Флаг должен быть установлен на 0;

TCP Протокол имеет механизм повторной передачи сообщений. Почему? Протокол MQTTкроме Повторная передача сообщениямеханизм? TCP согласованный报文重传механизмдаверновсе TCP Эффективный механизм ретрансляции сообщений, при этом MQTT согласованный Повторная передача Механизм сообщения действителен только для одной части информации и используется для достижения более надежной гарантии доставки новостей. Хотя TCP В обычных обстоятельствах протокол существует может гарантировать отсутствие потери пакетов, но это не так. Все еще бывают ситуации, когда время ожидания истекает или соединение прерывается. и MQTT согласованный QoS 1 и QoS 2 Требуются более надежные возможности доставки, и доставка должна быть гарантирована даже после повторного подключения клиента. потому что чтоэтот,Протокол MQTT также определяет одну Повторную передача сообщениямеханизм。


5. Резюме

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


Ссылки

  • Официальный сайт MQTT[6]
  • Протокол MQTT, китайская версия[7]
  • MQTT Protocol Guide[8] —— Steve С
  • Протокол Что такое MQTTда? Эта статья расскажет вам! [9] —— cxuan С
  • Android push-сообщение MQTT Настоящий бой[10] —— wildma С
  • Battle of The Protocols (HTTP vs. Websockets vs. MQTT)[11] —— Ronak Singh С

Я, да Сяо Пэн, возьму вас на сбор знаний системы Android.

Ссылки

[1]

GitHub · AndroidFamily: https://github.com/pengxurui/AndroidFamily

[2]

MQTT v3: http://mqtt.p2hp.com/mqtt311

[3]

MQTT v5: http://mqtt.p2hp.com/mqtt-5-0

[4]

https://juejin.cn/post/6976441705067184135: https://juejin.cn/post/6976441705067184135

[5]

здесь: https://github.com/mqtt/mqtt.org/wiki/SYS-Topics

[6]

MQTT Официальный сайт: https://mqtt.org/

[7]

Протокол Китайская версия MQTT: http://mqtt.p2hp.com/mqtt311

[8]

MQTT Protocol Guide: http://www.steves-internet-guide.com/mqtt

[9]

Протокол Что такое MQTTда? Эта статья расскажет вам! : https://juejin.cn/post/6976441705067184135

[10]

Android push-сообщение MQTT Реальный бой: https://www.jianshu.com/p/73436a5cf855

[11]

Battle of The Protocols (HTTP vs. Websockets vs. MQTT): https://www.linkedin.com/pulse/internet-things-http-vs-websockets-mqtt-ronak-singh-cspo/

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