tua domanda iniziale, né le risposte alle domande successive identificano quale implementazione del broker stai usando. Quindi potrebbe esserci una risposta più efficiente alla tua domanda.
Senza queste informazioni, concentriamoci su ciò che è possibile fare nel protocollo stesso.
MQTT supporta i messaggi CONSERVATI. È qui che il broker memorizza il messaggio conservato più recente rispetto a ciascun argomento. Quando un cliente si iscrive all'argomento, riceverà il messaggio conservato (se ne esiste uno).
C'è anche la funzione Last Will and Testament (LWT) (a cui goetzchr si riferisce), che può essere utilizzata per pubblicare un messaggio per conto del client se si disconnette in modo anomalo.
La combinazione di queste due funzionalità consente di creare un servizio di presenza semplice sul broker, il tutto all'interno del protocollo. Funziona in questo modo:
quando un client si connette, pubblica un messaggio MANTENERE ad un argomento unico ad esso, per esempio:
clients/my_client_id/state
con un carico utile di 1
. (sostituendo my_client_id
con l'id del cliente.
inoltre, al collegamento, imposta un messaggio LWT da pubblicare sullo stesso argomento, ma con un carico utile di 0
. Questo dovrebbe essere anche un messaggio RITENUTO.
quando un client si disconnette in modo pulito, pubblica un messaggio MANTENERE allo stesso soggetto con un carico utile di 0
Questo permette un altro client di sottoscrivere clients/#
per ricevere tutti i messaggi che indicano le variazioni di clienti 'stato della connessione (l'argomento completo che identifica il client e il valore del payload che indica lo stato della connessione).
Per ottenere più informazioni rispetto dello stato appena collegato, i clienti possono pubblicare un altro messaggio conservato alla connessione, a un altro argomento, ad esempio clients/my_client_id/info
che contiene tutte le informazioni che ti interessa.
questo funziona solo se si avere il controllo di tutti i client che si connettono al proprio broker e in grado di indurli a comportarsi in questo modo.
Questo non è un approccio ideale; si spera che l'implementazione del broker fornisca alcuni strumenti sul lato server per farlo.
Puoi aggiungere ulteriori dettagli su quali strumenti stai utilizzando? La domanda è molto leggera sui dettagli. – ralight
Il tipo di cosa che stai chiedendo sarà specifico per l'implementazione - il protocollo MQTT non lo fornisce; quindi la domanda di ralight su quali strumenti/clienti/broker stai usando. – knolleary
Grazie Roger e Knolleary per la vostra risposta. Sto usando un c-client su un router che sarà connesso al broker situato in una posizione remota su Internet e un client python sul server (dove è installato il broker). Possono esserci n-numeri di router in qualsiasi momento. Ora se il n/w del router va giù, il broker scollegherà quel client e a questo punto vorrei informare l'utente del router (via email usando l'API di google) che il suo n/w è giù. Scopo questo ti dà qualche intuizione , fammi sapere se hai bisogno di ulteriori dettagli. – Dilip