Dudas sobre suscribe


#1

cuando un device se suscribes a un topic puede suceder que a continuación el device se desconecte y, posteriormente, vuelva a conectarse. ¿Debe otra vez suscribirse al topic o queda suscrito hasta que hace un unsuscribe?.
Cuando el broker te envía un mensaje porque estas suscrito , ¿se anula la suscripción y debes volver a suscribirte a ese topic para seguir recibiendo futuros mensajes de ése topic?


#2

Buenas,

Si te conectas con cleanSession=false, y a continuación te subscribes, dicha subscripción permanecerá una vez desconectes y vuelvas a conectar. No tendrás necesidad de volver a mandar el SUBSCRIBE cada vez que conectas para activar el interés en dichos topics ya subscritos.

Este mecanismo de SUBSCRIBE + cleanSession=false, hace que recibas todos los mensajes de tipo qos=1 y qos=2 mientras está desconectado el dispositivo en cuestión, de manera que los recibirá cuando vuelva a conectarse.

Es decir, el SUBSCRIBE sigue en marcha y actuando incluso cuando el dispositivo está desconectado.

Cualquier dispositivo en marcha que conectó con cleanSession=false, y con un SUBSCRIBE en marcha que encaje el mensaje, entonces hay que entregarle el mensaje: ya sea porque está online y se le hace una entrega directa, o porque no está conectado en este momento, en cuyo caso, se almacena temporalmente para ser entregado en la próxima conexión.

Sin embargo, si conectas con cleanSession=true, esto no solo borra toda la sesión que hubiese, incluyendo subscripciones, sino que además, pierde todas las subscripciones que se hayan realizado durante la sesión (en realidad no se pierden, sino que no se guardan: distinción importante).

Según el estándar, una sesión MQTT (lo que se mantiene o se borra según cleanSession), es:

The Session state in the Server consists of:
· The existence of a Session, even if the rest of the Session state is empty.
· The Client’s subscriptions.
· QoS 1 and QoS 2 messages which have been sent to the Client, but have not been completely acknowledged.
· QoS 1 and QoS 2 messages pending transmission to the Client.
· QoS 2 messages which have been received from the Client, but have not been completely acknowledged.
· Optionally, QoS 0 messages pending transmission to the Client.

NOTA: La última parte, sobre los mensajes QoS0 no la implementa MyQtthub.com: sólo cubre los mensajes Qos1 y Qos2.