Dr.Doom
2018-07-17, 12:15:02
Howdy!
Frage zum Konzept publizierender Clients.
Client (publish only) ----> Broker ----> Client (subscribe only)
Auf dem angehängten Bild sieht man einige Debug-Ausgaben.
Verbindungsaufbau klappt.
Das Veröffentlichen von Nachrichten im Sekundentakt klappt. Von den (x,y)-Ausgaben ist x der RC mit 0=alles ok.
Ich trenne den Client bei der 10. Veröffentlichung vom Netzwerk.
Der nur publizierende Client macht fröhlich weiter und publiziert und publiziert. Laut RC=0 ist alles ok.
Erst 15 Sekunden später merkt er, hoppla, da stimmt doch was nicht, und der Wiederverbindungszirkus springt an und wird erfolgreich abgeschlossen.
(1) Keepalive
Die 15 Sekunden zwischen dem Trennen und der Reaktion darauf haben irgendwie nichts mit dem konfigurierten Keepalive zu tun.
keepalive ist auf 6 Sekunden für die obige Ausgabe festgelegt.
keepalive = 1, 3, 10, 40 oder 120 [s] ... völlig egal, 15 Sekunden nach dem Trennen merkt der Client erst/schon, dass etwas nicht stimmt.
Weiss jemand, warum das so ist?
(2) Quality of Service
Auf den Seite der nur lesenden Clients, erkennt man sofort nach dem Trennen der Verbindung, dass die nun nicht mehr zum Broker gesendeten Daten fehlern (klar...).
Nach dem Wiederverbinden des publizierenden Clients, werden die ins Nirvana gesendeten Daten (war ja für ihn alles ok für 15 Sekunden...) nicht vom publizierenden Client "nachgeholt".
Die Aufrufe von "publish" wurden mit einem QoS von 1 (mindestens einmal) oder 2 (genau einmal) durchgeführt.
Client ID ist eindeutig, CleanSession ist False, QoS > 0...
Warum sind die Daten verloren gegangen trotz QoS=1 bzw. 2?
Gehört es zum Konzept von MQTT, dass "nur publizierende" Clients die Daten gar nicht puffern und nach dem Wiederverbinden die Daten nachtragen?
Jemand eine Ahnung, ob das paho-Modul was taugt...? :ugly:
Frage zum Konzept publizierender Clients.
Client (publish only) ----> Broker ----> Client (subscribe only)
Auf dem angehängten Bild sieht man einige Debug-Ausgaben.
Verbindungsaufbau klappt.
Das Veröffentlichen von Nachrichten im Sekundentakt klappt. Von den (x,y)-Ausgaben ist x der RC mit 0=alles ok.
Ich trenne den Client bei der 10. Veröffentlichung vom Netzwerk.
Der nur publizierende Client macht fröhlich weiter und publiziert und publiziert. Laut RC=0 ist alles ok.
Erst 15 Sekunden später merkt er, hoppla, da stimmt doch was nicht, und der Wiederverbindungszirkus springt an und wird erfolgreich abgeschlossen.
(1) Keepalive
Die 15 Sekunden zwischen dem Trennen und der Reaktion darauf haben irgendwie nichts mit dem konfigurierten Keepalive zu tun.
keepalive ist auf 6 Sekunden für die obige Ausgabe festgelegt.
keepalive = 1, 3, 10, 40 oder 120 [s] ... völlig egal, 15 Sekunden nach dem Trennen merkt der Client erst/schon, dass etwas nicht stimmt.
Weiss jemand, warum das so ist?
(2) Quality of Service
Auf den Seite der nur lesenden Clients, erkennt man sofort nach dem Trennen der Verbindung, dass die nun nicht mehr zum Broker gesendeten Daten fehlern (klar...).
Nach dem Wiederverbinden des publizierenden Clients, werden die ins Nirvana gesendeten Daten (war ja für ihn alles ok für 15 Sekunden...) nicht vom publizierenden Client "nachgeholt".
Die Aufrufe von "publish" wurden mit einem QoS von 1 (mindestens einmal) oder 2 (genau einmal) durchgeführt.
Client ID ist eindeutig, CleanSession ist False, QoS > 0...
Warum sind die Daten verloren gegangen trotz QoS=1 bzw. 2?
Gehört es zum Konzept von MQTT, dass "nur publizierende" Clients die Daten gar nicht puffern und nach dem Wiederverbinden die Daten nachtragen?
Jemand eine Ahnung, ob das paho-Modul was taugt...? :ugly: