1.QoS服务质量等级
MQTT服务质量(Quality of Service 缩写 QoS)正是用于告知物联网系统,哪些信息是重要信息需要准确无误的传输,而哪些信息不那么重要,即使丢失也没有问题。
MQTT协议有三种服务质量级别:
QoS = 0 – 最多发一次
QoS = 1 – 最少发一次
QoS = 2 – 保证收一次
对于较为重要的MQTT消息,我们通常会选择QoS>0的服务级别(即QoS 为1或2)。
发布消息和接收消息的可能是服务端也可能是客户端。
总结:
- 若想实现QoS>0,订阅端连接服务端时cleanSession需要设置为false,订阅端订阅主题时QoS>0,发布端发布消息时的QoS>0。
- 服务端会选择发布消息和订阅消息中较低的QoS来实现消息传输,这也被称作“服务降级”。
- QoS = 0, 占用的网络资源最低,但是接收端可能会出现无法接收消息的情况,所以适用于传输重要性较低的信息。
- QoS = 1, MQTT会确保接收端能够接收到消息,但是有可能出现接收端反复接收同一消息的情况。
- QoS = 2, MQTT会确保接收端只接收到一次消息。但是QoS为2时消息传输最慢,另外消息传输需要多次确认,因此所占用的网络资源也是最多的。此类服务等级适用于重要消息传输。
- 由于QoS1和QoS2都能确保客户端接收到消息,但是QoS1所占用的资源较QoS2占用资源更小。因此建议使用QoS1来实现网络资源较为珍贵的环境下传输重要信息。
2.保留信息
MQTT设备发布的保留消息的流程与发布普通消息的流程十分类似。唯一区别是,在发布保留消息时,MQTT设备需要将PUBLISH报文中retainFlag设置为true
修改保留消息的方法:每一个主题只能有一个“保留消息”。
3.心跳机制
对于MQTT服务器来说,它要判断一台客户端是否依然保持连接,有些客户端并不经常发送消息给服务端。对于这种客户端,服务端可以使用类似心跳检测的方法,来判断客户端是否在线。
这个心跳时间间隔是我们在开发客户端时进行设置的。
4.MQTT遗嘱
主要用于MQTT客户端掉线时的情况
5.MQTT用户密码认证
username(用户名)和password(密码)。这里的用户名和密码是用于客户端连接服务端时进行认证需要的。