Ihre ursprüngliche Frage, Noch Antworten auf nachfolgende Fragen identifizieren, welche Maklerimplementierung Sie verwenden. Es könnte also eine effizientere Antwort auf Ihre Frage geben.
Ohne diese Informationen konzentrieren wir uns auf das, was Sie im Protokoll selbst tun können.
MQTT unterstützt RETAINED-Nachrichten. Hier speichert der Broker die zuletzt gespeicherte Nachricht für jedes Thema. Wenn ein Client das Thema abonniert, erhält er die beibehaltene Nachricht (falls vorhanden).
Es gibt auch das Testament (LWT) Merkmal (das goetzchr bezeichnet), die verwendet werden können eine Nachricht im Auftrag des Kunden zu veröffentlichen, wenn es ungewöhnlich trennt.
Durch die Kombination dieser beiden Funktionen können Sie einen einfachen Presence-Service auf dem Broker erstellen, und zwar alles innerhalb des Protokolls. Es funktioniert wie folgt:
, wenn ein Client eine Verbindung herstellt, veröffentlicht er eine beibehaltene Nachricht zu einem Thema eindeutig es zum Beispiel:
clients/my_client_id/state
mit einer Nutzlast von 1
. (my_client_id
durch die eigene ID des Kunden ersetzen.
Es stellt auch eine LWT-Nachricht auf Verbindung, die zu demselben Thema veröffentlicht wird, aber mit einer Nutzlast von 0
. Dies sollte auch eine RETAINED-Nachricht sein.
, wenn ein Client sauber trennt, veröffentlicht sie eine beibehaltene Nachricht auf das gleiche Thema mit einer Nutzlast von 0
Dies ist ein weiterer Client clients/#
abonnieren können alle Nachrichten in Kunden anzeigt, um die Änderungen zu erhalten Verbindungsstatus (das vollständige Thema identifiziert den Client und den Wert der Nutzlast, der den Verbindungsstatus angibt).
Um mehr Informationen als nur verbundenen Zustand zu erhalten, können die Kunden eine weitere Rückmeldung auf connect veröffentlichen, zu einem anderen Thema, zB clients/my_client_id/info
, das alle Informationen enthält, die Sie interessiert.
Dies funktioniert nur, wenn Sie Kontrollieren Sie alle Clients, die sich mit Ihrem Broker verbinden und sie dazu bringen, sich so zu verhalten.
Dies ist kein idealer Ansatz; hoffentlich wird Ihre Broker-Implementierung einige serverseitige Mittel bereitstellen, um dies zu tun.
Können Sie weitere Details zu den von Ihnen verwendeten Tools hinzufügen? Die Frage ist sehr hell auf Details. – ralight
Die Art der Sache, die Sie fragen, wird implementierungsspezifisch sein - das MQTT-Protokoll bietet dies nicht; Daher ralight's Frage, welche Tools/Clients/Broker Sie verwenden. – knolleary
Danke Roger und Knolleary für deine Antwort. Ich benutze einen C-Client auf einem Router, der mit dem Broker an einem Remote-Standort über das Internet und einem Python-Client auf dem Server verbunden wird (wo Broker installiert ist). Es kann zu jedem Zeitpunkt n-Nummern geben. Jetzt, wenn Router n/w ausfällt, wird Broker diesen Client trennen und an dieser Stelle möchte ich Benutzer des Routers informieren (per E-Mail mit Google API), dass seine/ihre N/W ist down.Hope dies gibt Ihnen einige Einblicke lassen Sie mich wissen, wenn Sie weitere Details benötigen. – Dilip