MQTT主要特性有哪些

发布时间:2021-12-07 09:47:41 作者:iii
来源:亿速云 阅读:340

这篇文章主要讲解了“MQTT主要特性有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MQTT主要特性有哪些”吧!

一、MQTT初探

1. MQTT是什么?

MQTT(Message Queuing Telemetry  Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布,目前***版本为v3.1.1。MQTT***的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。

当然,在物联网开发中,MQTT不是唯一的选择,与MQTT互相竞争的协议有XMPP和CoAP协议等,文章末尾会有一个比较和说明。

2. MQTT是哪一层的协议?

众所周知,TCP/IP参考模型可以分为四层:应用层、传输层、网络层、链路层。TCP和UDP位于传输层,应用层常见的协议有HTTP、FTP、SSH等。MQTT协议运行于TCP之上,属于应用层协议,因此只要是支持TCP/IP协议栈的地方,都可以使用MQTT。

3. MQTT消息格式

每条MQTT命令消息的消息头都包含一个固定的报头,有些消息会携带一个可变报文头和一个负荷。消息格式如下:

固定报文头 | 可变报文头 | 负荷

4. 固定报文头(Fixed Header)

MQTT固定报文头最少有两个字节,***字节包含消息类型(Message  Type)和QoS级别等标志位。第二字节开始是剩余长度字段,该长度是后面的可变报文头加消息负载的总长度,该字段最多允许四个字节。

剩余长度字段单个字节***值为二进制0b0111  1111,16进制0x7F。也就是说,单个字节可以描述的***长度是127字节。为什么不是256字节呢?因为MQTT协议规定,单个字节第八位(***位)若为1,则表示后续还有字节存在,第八位起“延续位”的作用。

例如,数字64,编码为一个字节,十进制表示为64,十六进制表示为0×40。数字321(65+2*128)编码为两个字节,重要性***的放在前面,***个字节为65+128=193(0xC1),第二个字节是2(0x02),表示2×128。

由于MQTT协议最多只允许使用四个字节表示剩余长度(如表1),并且***一字节***值只能是0x7F不能是0xFF,所以能发送的***消息长度是256MB,而不是512MB。

MQTT主要特性有哪些

表1

5. 可变报文头(Variable Header)

可变报文头主要包含协议名、协议版本、连接标志(Connect Flags)、心跳间隔时间(Keep Alive timer)、连接返回码(Connect  Return Code)、主题名(Topic Name)等,后面会针对主要部分进行讲解。

6. 有效负荷(Payload)

Payload直译为负荷,可能让人摸不着头脑,实际上可以理解为消息主体(body)。

当MQTT发送的消息类型是CONNECT(连接)、PUBLISH(发布)、SUBSCRIBE(订阅)、SUBACK(订阅确认)、UNSUBSCRIBE(取消订阅)时,则会带有负荷。

二、MQTT的主要特性

1. MQTT的消息类型(Message Type)

固定报文头中的***个字节包含连接标志(Connect  Flags),连接标志用来区分MQTT的消息类型。MQTT协议拥有14种不同的消息类型(如表2),可简单分为连接及终止、发布和订阅、QoS  2消息的机制以及各种确认ACK。至于每一个消息类型会携带什么内容,这里不多阐述。

MQTT主要特性有哪些

表2

2. 消息质量(QoS)

MQTT消息质量有三个等级,QoS 0,QoS 1和 QoS 2。

通过下面的例子可以更深刻的理解上面三个传输质量等级。

比如目前流行的共享单车智能锁,智能锁可以定时使用QoS level  0质量消息请求服务器,发送单车的当前位置,如果服务器没收到也没关系,反正过一段时间又会再发送一次。之后用户可以通过App查询周围单车位置,找到单车后需要进行解锁,这时候可以使用QoS  level 1质量消息,手机App不断的发送解锁消息给单车锁,确保有一次消息能达到以解锁单车。***用户用完单车后,需要提交付款表单,可以使用QoS level  2质量消息,这样确保只传递一次数据,否则用户就会多付钱了。

3. 遗愿标志(Will Flag)

在可变报文头的连接标志位字段(Connect Flags)里有三个Will标志位:Will Flag、Will QoS和Will Retain  Flag,这些Will字段用于监控客户端与服务器之间的连接状况。如果设置了Will Flag,就必须设置Will QoS和Will  Retain标志位,消息主体中也必须有Will Topic和Will Message字段。

那遗愿消息是怎么回事呢?服务器与客户端通信时,当遇到异常或客户端心跳超时的情况,MQTT服务器会替客户端发布一个Will消息。当然如果服务器收到来自客户端的DISCONNECT消息,则不会触发Will消息的发送。

因此,Will字段可以应用于设备掉线后需要通知用户的场景。

4. 连接保活心跳机制(Keep Alive Timer)

MQTT客户端可以设置一个心跳间隔时间(Keep Alive  Timer),表示在每个心跳间隔时间内发送一条消息。如果在这个时间周期内,没有业务数据相关的消息,客户端会发一个PINGREQ消息,相应的,服务器会返回一个PINGRESP消息进行确认。如果服务器在一个半(1.5)心跳间隔时间周期内没有收到来自客户端的消息,就会断开与客户端的连接。心跳间隔时间***值大约可以设置为18个小时,0值意味着客户端不断开。

5. MQTT其他特点

(1) 异步发布/订阅实现

发布/订阅模式解耦了发布消息的客户(发布者)与订阅消息的客户(订阅者)之间的关系,这意味着发布者和订阅者之间并不需要直接建立联系。

这个模式有以下好处:

由于采用了发布/订阅实现,MQTT可以双向通信。也就是说MQTT支持服务端反向控制设备,设备可以订阅某个主题,然后发布者对该主题发布消息,设备收到消息后即可进行一系列操作。

(2) 二进制格式实现

MQTT基于二进制实现而不是字符串,比如HTTP和XMPP都是基于字符串实现。由于HTTP和XMPP拥有冗长的协议头部,而MQTT固定报文头仅有两字节,所以相比其他协议,发送一条消息最省流量。

感谢各位的阅读,以上就是“MQTT主要特性有哪些”的内容了,经过本文的学习后,相信大家对MQTT主要特性有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. mssql主要特性是什么
  2. Backbone的主要特点及特性有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mqtt

上一篇:MQTT的相关参数怎么使用

下一篇:Hyperledger fabric Chaincode开发的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》