Псевдоним темы — новые возможности MQTT 5.0
По сравнению с MQTT v3.1 и v3.1.1, MQTT v5 предоставляет больше новых функций. Мы постараемся представить эти функции простыми для понимания способами и обсудим их влияние на разработки. Мы уже обсуждали некоторые новые функции в MQTT v5и мы продолжим обсуждение Псевдоним темы сегодня.
Что такое псевдоним темы
Псевдоним темы позволяет пользователям сократить возможно длинное и многократно используемое имя темы до 2-байтового целого числа, чтобы уменьшить потребление полосы пропускания при публикации сообщений.
Это 2-байтовое целое кодируется как поле атрибута в заголовке переменной PUBLISH
пакет. И это ограничено Псевдоним темы Максимум обмен между клиентом и брокером вCONNECT
и CONNACK
пакеты. Пока это ограничение не превышено, любое имя темы может быть сокращено до одного целого числа.
Зачем использовать псевдоним темы
В протоколе MQTT v3, если клиенту необходимо опубликовать большое количество сообщений в одной и той же теме (через одно и то же соединение MQTT), имя темы будет повторяться во всех сообщениях. PUBLISH
пакетов, что приводит к пустой трате ресурсов пропускной способности. В то же время парсить каждый раз строку UTF-8 с одним и тем же названием темы — пустая трата вычислительных ресурсов сервера.
Например, датчик сообщает о температуре и влажности с фиксированной частотой из местоположения. A
: Публикуется в тему /location/A/temperature
(23 байта) для каждого сообщения о температуре. Он также публикуется в теме. /location/A/humidity
(20 байт) для сообщений о влажности. Без псевдонимов темы не только для первого опубликованного сообщения, каждое последующее PUBLISH
Пакет должен передавать имена разделов (всего 53 байта) через соединение снова и снова. А брокеру придется многократно анализировать топики местоположения.
Как мы видим, цель введения функции псевдонима темы в MQTT v5.0 в основном состоит в том, чтобы уменьшить потребление ресурсов, как сетевых ресурсов, так и ресурсов ЦП.
Как используются псевдонимы тем
Жизненный цикл и область действия псевдонима темы
Псевдонимы темы управляются соответственно клиентом и сервером, а жизненный цикл и область действия ограничены текущим соединением. Когда псевдонимы темы необходимо использовать снова после отключения, отношение сопоставления topic alias <=> topic name
приходится перестраивать.
Псевдоним темы Максимум
Прежде чем клиент или сервер MQTT смогут начать использовать псевдонимы тем, им необходимо согласовать максимальное количество псевдонимов тем, разрешенных в текущем соединении. Эта часть обмена информацией осуществляется в CONNECT
пакет и CONNACK
пакет. Topic Alias Maximum
кодируется в заголовках переменных CONNECT
и CONNACK
пакеты в качестве атрибута сообщения.
Установить максимальный псевдоним темы взаимно
Topic Alias Maximum
в клиенте CONNECT
package указывает максимальное количество псевдонимов темы, которые сервер может использовать в этом соединении. Точно так же в CONNACK
пакет, отправленный сервером, значение указывает максимальное количество псевдонимов темы, которые могут использоваться противоположной стороной (клиентом) в текущем соединении.
Псевдоним темы может варьироваться от 1
к Topic Alias Maximum
. Параметр Topic Alias Maximum
к 0
для однорангового узла, чтобы запретить использование псевдонима темы.
Создание и использование псевдонима темы
Когда клиент (или сервер) отправляет PUBLISH
пакет, он может использовать однобайтовый идентификатор со значением 0x23
в атрибуте заголовка переменной, чтобы указать, что следующие 2 байта являются номером псевдонима темы.
Однако номер псевдонима темы не может быть равен 0, а также не может быть больше, чем Topic Alias Maximum
установить в CONNACK
(CONNECT
) пакет, отправленный сервером (клиентом).
После получения PUBLISH
пакет с псевдонимом темы и непустым именем темы, принимающая сторона установит отношение сопоставления между псевдонимом темы и именем темы. в PUBLISH
пакеты, отправленные после этого, псевдоним темы длиной 2 байта может использоваться для публикации сообщения, а принимающая сторона будет использовать ранее построенное отношение отображения topic alias <=> topic name
чтобы найти тему для сообщений.
Поскольку такое сопоставление поддерживается на обоих концах соответственно (т. е. не обязательно должно быть идентичным), клиент и сервер могут публиковаться в разных разделах, используя один и тот же номер псевдонима.
Клиент MQTT и брокер управляют своими псевдонимами соответственно.
Использование неизвестного псевдонима темы
Если псевдоним темы используется в PUBLISH
Если пакет не был создан ранее, т. е. принимающая сторона не построила отношение сопоставления между текущим псевдонимом темы и именем темы, а поле имени темы в заголовке переменной этого сообщения пусто, принимающая сторона должна отправить DISCONNECT
пакет с REASON_CODE из 0x82
чтобы закрыть соединение.
Неизвестный псевдоним темы
Воссоздание псевдонима темы
Уже построенное сопоставление псевдонима с именем темы можно перестроить с новым PUBLISH
пакет с псевдонимом темы и непустым именем темы.
В качестве примера на следующей диаграмме псевдоним темы 123
который ранее использовался для темы температуры, теперь обновляется для представления темы влажности.
Клиент MQTT и брокер воссоздают псевдонимы тем
Заключение
В качестве новой функции в MQTT v5 псевдоним темы обеспечивает более гибкий способ использования модели обмена сообщениями pub-sub. Для сообщений, неоднократно публикуемых в ограниченном наборе тем, особенно в большом объеме, псевдонимы тем могут эффективно экономить как сетевые, так и вычислительные ресурсы.
Первоначально опубликовано на