MQTT toujours connecté et chargement de données 4G

10

Je travaille sur un projet IoT qui implique des milliers de clients MQTT qui sont connectés à un courtier (moustique) via un routeur / modem 4G / WiFi. Moins de 10 clients sont connectés au même routeur et les routeurs proviennent de différents endroits (différentes villes).

À l'heure actuelle, nous avons très peu de clients et ils sont toujours connectés au courtier. Je sais de cette discussion qu'il n'y aura pas de problèmes même lorsqu'ils atteindront plus de 1000 unités.

Ma question concerne la charge de trafic sur la connexion 4G. L'utilisateur final a peur de la consommation de données avec tous ces «canaux» ouverts et non utilisés. Autant que je sache quand il n'y a aucune activité, seuls les paquets de maintien en vie sont envoyés , bien que je ne puisse pas trouver ces informations avec certitude dans la documentation MQTT.

Puis-je supposer que le trafic quand aucun paquet n'est publié est négligeable?

marque
la source

Réponses:

6

La spécification MQTT répertorie les détails des paquets PINGREQ et PINGRESP qui composent la transaction persistante .

Chacun n'a qu'une taille de 2 octets, donc un événement de maintien en vie complet utilise 4 octets au total. Étant donné que vous pouvez contrôler la fréquence d'envoi des paquets persistants pour chaque client en fonction de la rapidité avec laquelle vous devez savoir que la connexion a chuté, vous avez un contrôle total sur la quantité de données utilisées lorsque aucun message n'est réellement publié.

Si vous souhaitez réduire encore plus la charge de données, vous pouvez avoir un courtier distinct en cours d'exécution avant le routeur 4G auquel les 10 appareils se connectent, puis ponté vers le courtier central. Cela réduirait le nombre de paquets persistants à 1 par routeur 4G plutôt qu'à 1 par client. Cela a l'avantage que les 10 appareils locaux peuvent continuer à passer des messages entre eux si le lien tombe en panne et vous pouvez utiliser les messages retenus / Last Will et Testement pour suivre quand des clients individuels tombent en panne.

hardillb
la source
L'utilisation d'un courtier intermédiaire est un bon conseil, même si je crains que cela ne rentre pas dans ce cas spécifique. Utile à savoir, cependant!
Mark
Quoi qu'il en soit, je connaissais le comportement de PINGREQ / RESP, mais ce que je n'ai pas trouvé, c'est que ce sont les seuls paquets échangés quand il n'y a pas d' activité réelle (ie initiés par les applications utilisateur). Je pourrais déduire cela de votre réponse, mais les documents ne semblent pas le dire explicitement.
Mark
Le minuteur de maintien en vie est réinitialisé à chaque fois qu'un paquet est reçu, je ne me souviens pas où dans la spécification cela est dit du haut de ma tête
hardillb
2
Je voulais juste souligner que la suggestion d'introduire un courtier local est encore plus logique si nous ne parlons pas de 2 octets par message, mais à cause de TCP / IP, cela ressemble plus à 42 octets par message, donc 84 pour un cycle de ping.
xwoker
1
@Mark Le fait que seuls les paquets Ping sont la seule chose envoyée si aucun message n'est envoyé est impliqué par les phrases après ce tableau: docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/…
hardillb