Псевдоним темы — новые возможности 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 пакеты в качестве атрибута сообщения.

Установить максимальный псевдоним темы MQTT взаимно

Установить максимальный псевдоним темы взаимно

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 и брокер управляют своими псевдонимами соответственно.

Клиент MQTT и брокер управляют своими псевдонимами соответственно.

Использование неизвестного псевдонима темы

Если псевдоним темы используется в PUBLISH Если пакет не был создан ранее, т. е. принимающая сторона не построила отношение сопоставления между текущим псевдонимом темы и именем темы, а поле имени темы в заголовке переменной этого сообщения пусто, принимающая сторона должна отправить DISCONNECT пакет с REASON_CODE из 0x82 чтобы закрыть соединение.

Неизвестный псевдоним темы

Неизвестный псевдоним темы

Воссоздание псевдонима темы

Уже построенное сопоставление псевдонима с именем темы можно перестроить с новым PUBLISH пакет с псевдонимом темы и непустым именем темы.

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

Клиент MQTT и брокер воссоздают псевдонимы тем

Клиент MQTT и брокер воссоздают псевдонимы тем

Заключение

В качестве новой функции в MQTT v5 псевдоним темы обеспечивает более гибкий способ использования модели обмена сообщениями pub-sub. Для сообщений, неоднократно публикуемых в ограниченном наборе тем, особенно в большом объеме, псевдонимы тем могут эффективно экономить как сетевые, так и вычислительные ресурсы.

Первоначально опубликовано на

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *