保留消息&心跳机制
Retained message 保留消息
作用:和普通消息不同的是当我们发布了一个保留消息以后,任意一个客户端只要订阅这个主题就会马上收到这个主题里的保留消息。
删除某个主题保留消息的方式:
在该主题下发布一条空的保留消息。
客户端如何发布保留消息?
当publish报文中retainFlag设置为true时,payload下的内容将作为保留消息来处理。
什么场合下需要用到保留消息?
客户端发布信息的时间间隔过于长,其他客户端想要订阅主题等待的时间可能会很久,不利于客户端工作,如果用到了保留消息这个机制,订阅端马上就可以收到这个主体中最新的消息内容。

服务端根据客户端是否能给它发消息来判断客户端服务端是否与它保持连接。
缺陷:若某客户端只收取信息不发布信息,那么MQTT服务端无法判断是否保持连接
心跳机制:要求不常向服务端发布消息的客户端定时向服务端发布消息。
设置心跳时间间隔/保持连接间隔:客户端向服务端发起连接请求时会向服务端发送CONNECT报文,该数据包中的KeepAlive就是设置的地方。
MQTT客户端可以设置一个心跳间隔时间(Keep Alive Timer),表示在每个心跳间隔时间内发送一条消息。如果在这个时间周期内,没有业务数据相关的消息,客户端会发一个PINGREQ消息,相应的,服务器会返回一个PINGRESP消息进行确认。如果服务器在一个半(1.5)心跳间隔时间周期内没有收到来自客户端的消息,就会断开与客户端的连接。心跳间隔时间最大值大约可以设置为18个小时,0值意味着客户端不断开。