Linux--(三)MQTT协议参数

一、QoS

QoS 是 Quality of Service 的缩写,所以中文名便是服务质量。一个物联网通信中有些信息非常重要,我们需要确保这类重要信息可以准确无误的发送和接收,而有些信息则相对不那么重要,这类信息如果在传输中丢失不会影响系统的运行;QoS 便用于告诉客户端或服务器哪些信息是重要信息,需要准确无误的传输、不可丢失;哪些信息不是那么重要,即使在传输过程中丢失也无妨!
MQTT 设计了一套保证消息稳定传输的机制,包括消息应答、存储和重传。在这套机制下,提供了三种不同级别的 QoS ( Quality of Service ),也就是 MQTT 协议有三种服务质量等级:
QoS = 0 :最多发一次;
不管接收方收没收到,发送放只发送一次。
QoS = 1 :保证收一次;
发送端向接收端发送 PUBLISH 报文,当接收端收到 PUBLISH 报文后会向发送端回复一个 PUBACK 报文,如果发送端收到 PUBACK 报文,那么它就知道消息已经被接收端成功接收!
假如过了一段时间后,发送端没有收到 PUBACK 报文,那么发送端会再次发送消息(发送 PUBLISH 报文),然后再次等待接收端的 PUBACK 确认报文。因此,当 QoS=1 时,发送端在一定时间内没有收到接收端的 PUBACK 确认报文,会重复发送同一条消息。
QoS = 2 :保证只收一次。
MQTT 服务质量最高级是 2 级,即 QoS=2 。当 MQTT 服务质量为 2 级时, MQTT 协议可以确保接收端只接收一次消息(注意是只接收到一次,在 QoS=1 的情况下,接收端接收到消息的次数可能不止一次: >=1 )。
另外,要想实现 QoS>0 的 MQTT 通信,客户端在连接服务端时务必要将 cleanSession 设置为 false 。如果这一步没有实现,那么客户端是无法实现 QoS>0 的 MQTT 通信,因为如果 cleanSession 设置为 true ,则意味着客户端不会接收到任何离线消息,包括 QoS1 和 QoS2 的情况。
服务质量降级
当客户端在发布消息和订阅主题时用的不同接别的QOS,服务端会采用低级别的质量等级进行服务。

二、保留消息

保留消息的作用,其实非常简单,就是让服务端对客户端发布的消息进行保留,如果有其它客户
端订阅了该消息对应的主题时,服务端会立即将保留消息推送给订阅者,而不必等到发送者向主题发布新消息时订阅者才会收到消息。

更新保留消息

但是需要注意的是,每一个主题只能有一个"保留消息",如果客户端想要更新"保留消息",就需要向该主题发送一条新的"保留消息",这样服务端会将新的"保留消息"覆盖旧的"保留消息"。当有客户端订阅该主题时,服务端就会将最新的"保留消息"发送给订阅者。

三、MQTT心跳机制

在医院里,医生利用心跳来判断患者是否还有生命体征。对于 MQTT 服务器来说,它要判断 MQTT 客 户端是否依然与它保持着连接,就是检查该客户端是不是经常给它发送心跳数据包,如果经常收到客户端的消息,那么证明该客户端肯定在线。

四、MQTT的遗嘱机制

客户端断开与服务端的连接通常是有两种方式的:
⚫ 客户端主动向服务端发送 DISCONNECT 报文,请求断开连接,自然服务端也就知道了客户端要离线了;
⚫ 客户端 意外掉线 。被动与服务端断开了连接
MQTT 协议允许客户端在"活着"的时候就写好遗嘱,这样一旦客户端 意外断线 ,服务端就可以将客户端的遗嘱公之于众。请注意,在这段话中,意外断线 这几个字特意做了加粗处理,这是因为,客户端的遗嘱只在意外断线时才会发布,如果客户端正常的断开了与服务端的连接(主动断开),这个遗嘱机制是不会启动的,服务端也不会将客户端的遗嘱公布。
那什么是意外断线?其实除了客户端主动向服务端发送 DISCONNECT 报文请求断开连接这种情况之外,其它断线的情况都属于意外断开连接,譬如网络不稳定、客户端设备没电关机了等。

五、MQTT用户密码设置

有些 MQTT 服务端需要客户端在连接时提供用户名和密码,只有客户端正确提供了用户名和密码后, 才能连接服务端,否则服务端将会拒绝客户端连接,那么客户端也就无法发布和订阅消息了。
用户名和密码除了用于在连接服务端时进行认证、校验这一功能外,有些 MQTT 服务端也利用此信息来识别客户端属于哪一个用户,从而对客户端进行管理。譬如用户可以拥有私人主题,这些主题只有该用户可以发布和订阅;对于私人主题,服务端就可以利用客户端连接时的用户名和密码来判断该客户端是否有发布订阅该用户私人主题的权限。

相关推荐
搬码临时工1 小时前
动态域名服务ddns怎么设置?如何使用路由器动态域名解析让外网访问内网?
服务器·网络·tcp/ip·智能路由器·访问公司内网
wudinaniya1 小时前
笔记本电脑打开网页很慢,一查ip地址网段不对怎么处理
网络·网络协议·tcp/ip·电脑
天翼云开发者社区2 小时前
办公网络流量隔离:为高效办公保驾护航
网络·安全
和计算机搏斗的每一天2 小时前
ip命令详解
服务器·网络·tcp/ip
XY.散人2 小时前
初识Linux · IP分片
网络·网络协议·tcp/ip
zhong_kh2 小时前
联邦+反射器 基础实验
网络
xjdksxkmd2 小时前
5.11作业
运维·服务器·网络
神经毒素2 小时前
WEB安全--Java安全--LazyMap_CC1利用链
java·开发语言·网络·安全·web安全
杰克逊的日记3 小时前
阿里云的网络有哪些
网络·阿里云·云计算
萌狼蓝天3 小时前
[SSL]1Panel添加阿里云DNS账户
网络·网络协议·阿里云·云计算·ssl