Может ли клиент MQTT подписаться на созданную им тему?

18

В моем понимании, в MQTT тема создается, когда клиент публикует что-то с соответствующим названием темы.

Не нужно настраивать тему, публикации по ней достаточно.

От сюда .

Может ли клиент подписаться на собственную тему, после того, как опубликовал, создал ли он? Я не смог найти никаких ограничений на это в спецификациях . Он также не указан как возможное ненормальное поведение:

5.4.8 Выявление ненормального поведения

Реализации сервера могут отслеживать поведение клиента для обнаружения потенциальных инцидентов безопасности. Например:

  • Повторные попытки подключения
  • Повторные попытки аутентификации
  • Ненормальное прекращение соединений
  • Сканирование тем (попытки отправить или подписаться на множество тем)
  • Отправка недоставленных сообщений (нет подписчиков на темы)
  • Клиенты, которые подключаются, но не отправляют данные

Исходя из этого, я думаю, что это, безусловно, возможно. Так что меня интересует, каковы варианты использования этой функции?

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

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

Бенс Кауликс
источник

Ответы:

19

Да, есть возможность подписаться на тему, которая создается сама собой.

Клиент MQTT может одновременно быть и издателем, и подписчиком. В терминах MQTT клиент включает в себя subscribersи publishers.

Меня интересует, каковы варианты использования этой функции?

Возможный вариант использования (я предполагаю) заключается в том, что, если есть три клиента (x, y, z), подписанных на тему, x-topicсозданную x. Всякий раз, когда сообщение публикуется x-topic, все, кто подписан на эту тему, получат сообщение. Если yпубликует сообщение в теме x-topic(я полагаю, что это можно сделать), если xне подписывается на эту тему, даже если она создала тему, она не будет получать сообщения.

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

Но механизм можно контролировать, используя посредников в качестве посредника.

bravokeyl
источник
Да, этот вариант приходил мне в голову. Только я не был уверен, сможет ли новый клиент опубликовать в существующей теме, уже используемой другим издателем.
Бенс Кауликс
Да, новый клиент может опубликовать существующую тему. Помните, что клиенты не общаются напрямую, каждая публикация и подписка происходит через брокера.
Бравокейл
0

Да.

Клиенты MQTT подключены к брокеру, который может быть облачным или другим устройством.

Нет такой вещи как создание темы. Они используются в качестве заголовка для сообщения. Так что, если ваш клиент подписался на тему, и если он что-то публикует по этой теме, то сообщение будет снова получено через брокера для клиента.

Примерами хороших брокеров являются Mosquitto для работы на устройствах и CloudMqtt для облачного брокера.

Хитеш Пратюш V
источник
4
Это на самом деле не расширяет объем знаний за пределы того, что другой ответ уже давал год назад. Вы можете добавлять новые ответы даже на ответы на вопросы. Однако эти ответы должны предлагать дополнительную или обновленную информацию о вопросе или решении.
Хельмар