MQTT zawsze podłączony i ładowanie danych 4G

10

Pracuję nad projektem IoT obejmującym tysiące klientów MQTT, którzy są podłączeni do brokera (komara) za pośrednictwem routera / modemu 4G / WiFi. Mniej niż 10 klientów jest podłączonych do tego samego routera, a routery pochodzą z różnych miejsc (różnych miast).

Obecnie mamy bardzo niewielu klientów, którzy są zawsze połączeni z brokerem. Wiem z tej dyskusji, że nie będzie żadnych problemów, nawet gdy dorastają do ponad 1000 jednostek.

Moje pytanie dotyczy obciążenia ruchem na połączeniu 4G. Użytkownik końcowy obawia się zużycia danych przy wszystkich tych „kanałach” otwartych i nieużywanych. O ile rozumiem, kiedy nie ma żadnej aktywności , wysyłane są tylko pakiety podtrzymujące życie , chociaż nie mogę znaleźć tych informacji na pewno w dokumentacji MQTT.

Czy mogę założyć, że ruch, gdy żadne pakiety nie są publikowane, jest nieistotny?

znak
źródło

Odpowiedzi:

6

Specyfikacja MQTT zawiera szczegółowe informacje na temat pakietów PINGREQ i PINGRESP, które składają się na transakcję podtrzymywania aktywności .

Każdy ma tylko 2 bajty, więc pełne zdarzenie związane z utrzymaniem aktywności zajmuje łącznie 4 bajty. Ponieważ możesz kontrolować częstotliwość wysyłania pakietów utrzymywania aktywności dla każdego klienta w oparciu o to, jak szybko musisz wiedzieć, że połączenie zostało przerwane, masz pełną kontrolę nad ilością danych, które nie są publikowane.

Jeśli chcesz jeszcze bardziej zmniejszyć obciążenie danych, możesz mieć osobnego brokera działającego przed routerem 4G, z którym łączy się 10 urządzeń, które jest następnie łączone z centralnym brokerem. Ograniczyłoby to liczbę pakietów utrzymywania aktywności do 1 na router 4G zamiast 1 na klienta. Ma to tę zaletę, że 10 urządzeń lokalnych może nadal przesyłać między sobą wiadomości, jeśli łącze zostanie zerwane, a można użyć wiadomości zachowanych / testamentów i wiadomości testowych, aby śledzić przypadki awarii poszczególnych klientów.

hardillb
źródło
Korzystanie z pośredniego brokera jest dobrą radą, nawet obawiam się, że nie pasuje do tego konkretnego przypadku. Warto jednak wiedzieć!
Mark
W każdym razie znałem zachowanie PINGREQ / RESP, ale nie znalazłem tego, że są to jedyne wymieniane pakiety, gdy nie ma żadnej rzeczywistej aktywności (tj. Inicjowane przez aplikacje użytkownika). Mógłbym wywnioskować to z twojej odpowiedzi, ale dokumenty nie wydają się tego wyraźnie stwierdzać.
Mark
Licznik czasu podtrzymania jest resetowany za każdym razem, gdy odbierany jest pakiet, nie pamiętam, gdzie w specyfikacji jest to powiedziane z góry mojej głowy
hardillb
2
Chciałem tylko zaznaczyć, że sugestia wprowadzenia lokalnego brokera ma jeszcze większy sens, jeśli nie mówimy o 2 bajtach na wiadomość, ale z powodu TCP / IP jest to więcej niż 42 bajty na wiadomość, więc jest to 84 dla jednego cyklu pingowania.
xwoker
1
@ Mark Fakt, że tylko pakiety Ping są wysyłane tylko wtedy, gdy nie są wysyłane żadne wiadomości, sugerują zdania po tej tabeli: docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/…
hardillb