Ich habe eine Anzahl von Beispielen von Paho-Clients gesehen, die Sensordaten lesen, die dann veröffentlicht werden, z. B. https://github.com/jamesmoulding/motion-sensor/blob/master/open.py. Nichts, was ich gesehen habe, hat eine Netzwerkschleife gestartet, wie in https://eclipse.org/paho/clients/python/docs/#network-loop vorgeschlagen. Ich frage mich, ob die Netzwerkschleife für die Veröffentlichung unnötig ist? Vielleicht nur nötig, wenn ich etwas abonniert habe?mqtt paho Netzwerkschleife unnötig?
Antwort
Die Netzwerk-Schleife für eine Reihe von Dingen benötigt wird:
- Um mit eingehenden Nachrichten
- die Ping-Pakete zu versenden benötigt, um eine Verbindung am Leben zu halten
- Um die zusätzlichen Pakete zu verarbeiten, die für Hoch QOS
- senden Nachrichten, die mehr als ein Netzwerkpaket aufnehmen (zB größer als lokale MTU)
Die Ping-Nachrichten werden nur benötigt, wenn Sie eine niedrige Nachrichtenrate haben (weniger als 1 msg pro Keep-Alive-Periode).
Da Sie in diesen Tagen die Netzwerkschleife im Hintergrund auf einem separaten Thread starten können, würde ich es empfehlen, unabhängig
Ausgangauf zu erweitern, was @hardillb gesagt hat, ein bisschen, seine Nummer 2 „den Ping senden Pakete, die benötigt werden, um eine Verbindung am Leben zu erhalten "ist nur dann unbedingt erforderlich, wenn Sie nicht mit einer Geschwindigkeit veröffentlichen, die ausreicht, um die Keep-Alive zu erreichen, die Sie bei der Verbindung festgelegt haben. Mit anderen Worten, es ist durchaus möglich, dass der Client niemals ein PINGREQ senden muss und daher nie einen PINGRESP erhalten muss.
Der wichtigere Punkt ist jedoch, dass es unmöglich ist zu garantieren, dass das Aufrufen von publish()
das Senden der Nachricht tatsächlich beendet, ohne die Netzwerkschleife zu verwenden. Es kann eine Zeitlang funktionieren, aber es kann nicht immer möglich sein, eine Nachricht zu senden.
Die nächste Version des Clients ermöglicht es Ihnen, dies zu tun:
m = mqttc.publish("class", "bar", qos=2)
m.wait_for_publish()
aber dies wird erfordern, dass die Netzwerkschleife in einem separaten Thread verarbeitet wird, wie mit loop_start()
.
- 1. MQTT Paho Python zuverlässig wiederverbinden
- 2. Paho (MQTT) -Client kann keine Verbindung herstellen
- 3. Rückgabedaten ON_MESSAGE in Python paho MQTT
- 4. android - Paho MQTT-Dienst für die Veröffentlichung
- 5. Abonnieren und lesen MQTT Nachricht mit PAHO
- 6. Paho MQTT Verbindung zu MQXR Broker
- 7. AWS IoT und Raspberry Pi mit paho-mqtt nicht verbinden
- 8. Paho Mqtt Android Verbindung zu Broker schlägt fehl mit (32103)
- 9. paho-MQTT python: Wie kann die loop_forever subscribe-Nachricht unterstützen?
- 10. Python paho-MQTT-Verbindung mit azurem IoT-Hub
- 11. MQTT Broker Verbindungsmanagement
- 12. Reconnect MQTT-Client in Android
- 13. SOP-Verletzung in Poho MQtt
- 14. MQTT Eclipse Paho-Client auf Android, trennen hängt und nie beendet
- 15. Paho Python MQTT-Client verbindet erfolgreich, aber on_connect Callback wird nicht aufgerufen
- 16. Best Practices beim Umgang mit MQTT-Nachrichten mit der Paho Java-Bibliothek
- 17. Paho MQTT C Clientverbindung mit azurem IoT-Hub auf Beaglebone Schwarz
- 18. versuchen, mqtt Nachricht als Toast
- 19. Paho Teilnehmer on_message/on_connect funktioniert nicht
- 20. Verbindung mit Mqtt mit Kii Cloud Service
- 21. PHP schließendes Tag unnötig?
- 22. Unnötig lange Regex
- 23. Direkt MQTT vs MQTT über WebSocket
- 24. Ist/catch für AVAudioPlayer unnötig?
- 25. Verbinden mit Azure IoT Hub mit Java Paho
- 26. Kann ich mit Django Channels MQTT-Nachrichten in Echtzeit anzeigen?
- 27. Wie man einen Thread hält, bis die MQTT Nachricht angekommen ist
- 28. Benötige ich tcp: // in der MQTT Brokeradresse?
- 29. Wie behandelt man die Funktion mqtt loop_forever bei der Verwendung von Django?
- 30. Paho Android Client löscht Verbindung, wenn eine Nachricht angezeigt wird
Ich werde weiterhin die Netzwerkschleife verwenden, wie vorgeschlagen. Beachten Sie aber auch, dass es viele Beispiele im Web gibt (in Tutorials und ähnlichen), die es nicht verwenden. Vielleicht hat man noch nicht genug Leute gebissen. Ich frage mich, ob die Standardeinstellung sein sollte, um Leute dazu zu bringen, sie manuell auszuschalten. Umgekehrt von dem, was jetzt ist. – fickas
Ja, viele Leute, die keine Dokumentation lesen :(Ich werde die Rückwärtskompatibilität nicht durch Ändern des Verhaltens brechen, es muss nur ein nerviger gelegentlicher Bug für Leute sein, die die Schleife nicht verarbeiten. – ralight