Уменьшить трафик MQTT, когда нет подписчиков

В контексте протокола MQTT есть ли способ заставить клиента не отправлять сообщения публикации, когда в этой теме нет подписчиков?

Другими словами, существует ли стандартный способ выполнения публикации с учетом подписчика, уменьшающий сетевой трафик от публикующих клиентов к брокеру?

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


person Pedro Affonso    schedule 26.09.2016    source источник


Ответы (3)


В предстоящей спецификации MQTT v5 брокер может указать клиенту, что у темы нет подписчиков, когда клиент публикует в этой теме. Это возможно только для публикаций QoS 1 или QoS 2, поскольку сообщение QoS 0 не приводит к ответу.

person ralight    schedule 26.09.2016
comment
Как это помогает? В момент публикации может не быть подписчиков, но кто-то может подписаться перед следующей публикацией - person hardillb; 26.09.2016
comment
По общему признанию, это не очень помогает в этом сценарии. Это помогает уменьшить трафик для потока QoS 2, поскольку вам не нужно его завершать. - person ralight; 27.09.2016
comment
Почему нет MQTT v4? - person Alessandro Da Rugna; 27.09.2016
comment
Поскольку MQTT v3.1.1 использовал протокол версии 4. V5 возвращает их синхронизацию. - person ralight; 28.09.2016

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

Это ключевой момент в обмене сообщениями pub/sub, почти полное разделение производителя и потребителя информации.

person hardillb    schedule 26.09.2016

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

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

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

person barny    schedule 28.09.2016