MQTT协议简介
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。1999由IBM员工Andy 和 Arlen撰写了该协议的第一个版本,并于在1999年由IBM发布,发布后的10几年都是在IBM内部使用,直到IBM公司在2013年就向结构化资讯标准促进组织提交了 MQTT 3.1 版规范,并附有相关章程,以确保只能对规范进行少量更改,至此MQTT得以广泛的应用。
MQTT协议的特点
1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2、对负载内容屏蔽的消息传输;
3、使用 TCP/IP 提供网络连接;
主流的MQTT是基于TCP连接进行数据推送的,但是同样有基于UDP的版本,叫做MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。
4、有三种消息发布服务质量:
5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制
MQTT协议应用范围
1,推送服务,比如极光,个推等
2,物联网IOT方向
MQTT协议通信模型
MQTT采用的是发布/订阅的消息模型,如下图:
通过上图可以看到MQTT通常有如下部分组成:
1,MQTT clent(publisher):主要是发布主题的客户端,把主题和主题信息发送给broker(消息代理)
2,MQTT Broker:接受发布者发布的消息,并根据message topic里面的主题信息分发到订阅了发布主题的客户端
3,MQTT client(subcriber):订阅者,接收broker发布出的订阅信息
MQTT协议如何建立连接
MQTT的连接是针对MQTT client 和 MQTT Broker之间,客户端之间不主动直连,通常的步骤如下:
1,MQTT client 发布一个connect的消息到broker
2,MQTT broker收到消息后,会回复一个CONNACK 消息和一个状态信息
3,一旦建立连接,broker一直保持连接状态,直到 client发送disconnect的命令或者网络断开才会结束连接
如下图:
MQTT协议消息发布服务质量
一个消息发布包通常如下:
我们今天主要讲解:qos 应用消息传送的保障水平
主要有如下:
值为0:"至多一次",消息发布完全依赖底层TCP/IP网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。这一种方式主要普通APP的推送,倘若你的智能设备在消息推送时未联网,推送过去没收到,再次联网也就收不到了。
值为1:"至少一次",确保消息到达,但消息重复可能会发生。
值为2:"只有一次",确保消息到达一次。在一些要求比较严格的计费系统中,可以使用此级别。在计费系统中,消息重复或丢失会导致不正确的结果。这种最高质量的消息发布服务还可以用于即时通讯类的APP的推送,确保用户收到且只会收到一次。
结语
MQTT协议在万物互联的时代得到了广泛的应用,越有越多的智能设备通过MQTT协议把设备的信息上传,进而后台累积了海量的数据,通过数据进行大数据分析建模,推出商业化的模式,形成了闭环。这在二十几年前,IBM刚刚推出时是没想到。数据是根本,我们如果要稳定可靠的保障消息的准确到达后端,需要进一步去了解MQTT协议,进而在协议的基础上去开发自己我们应用,想要进一步了解MQTT的进一步动态,请移步官网:https://www.hivemq.com/mqtt-protocol/
网友评论