MQTT всегда подключен и загрузка данных 4G


10

Я работаю над проектом IoT, в котором участвуют тысячи клиентов MQTT, подключенных к брокеру (mosquitto) через маршрутизатор / модем 4G / WiFi. Менее 10 клиентов подключены к одному и тому же маршрутизатору, и маршрутизаторы приходят из разных мест (разных городов).

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

Мой вопрос о нагрузке трафика на соединение 4G. Конечный пользователь боится потребления данных, когда все эти «каналы» открыты и не используются. Насколько я понимаю, когда нет активности, отправляются только пакеты keep-alive , хотя я не могу точно найти эту информацию в документации MQTT.

Можно ли предположить, что трафик, когда ни один пакет не опубликован, незначителен?

Ответы:


6

В спецификации MQTT перечислены детали пакетов PINGREQ и PINGRESP , которые составляют транзакцию keep-alive.

Каждый из них имеет размер всего 2 байта, поэтому полное событие keep-alive использует всего 4 байта. Поскольку вы можете контролировать частоту отправки пакетов поддержки активности для каждого клиента в зависимости от того, как быстро вам нужно знать, что соединение разорвано, вы полностью контролируете, сколько данных используется, когда сообщения фактически не публикуются.

Если вы хотите еще больше снизить нагрузку на данные, у вас может быть отдельный брокер, работающий до маршрутизатора 4G, к которому подключаются 10 устройств и который затем соединяется с центральным брокером. Это уменьшит количество пакетов поддержки активности до 1 на маршрутизатор 4G, а не на 1 на клиент. Преимущество состоит в том, что 10 локальных устройств могут продолжать передавать сообщения между собой, если связь не работает, и вы можете использовать сохраненные сообщения / Last Will и сообщения Testement для отслеживания, когда отдельные клиенты выходят из строя.


Использование промежуточного брокера - хороший совет, даже я боюсь, что он не подходит в данном конкретном случае. Полезно знать, хотя!
Марк

В любом случае, я знал поведение PINGREQ / RESP, но я не обнаружил, что они являются единственными пакетами, которыми обмениваются, когда нет реальной активности (то есть инициируется пользовательскими приложениями). Я мог бы сделать вывод из вашего ответа, но в документах, похоже, это прямо не указано.
Марк

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

2
Просто хочу отметить, что предложение ввести локального брокера имеет еще больший смысл, если мы не говорим о 2 байтах на сообщение, но из-за TCP / IP это больше похоже на 42 байта на сообщение, поэтому его 84 для одного цикла проверки связи.
xwoker

1
@Mark. Тот факт, что только пакеты Ping отправляются только в том случае, если сообщения не отправляются, подразумевается в предложениях после этой таблицы: docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/…
hardillb
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.