网络上搜索MQTT协议,会出现太多的解释,这里就不做官方标准释义的复制了。这一节我们从实战理解角度,通俗的将MQTT协议的作用及实现原理说一下,旨在可以快速理解MQTT协议。所以可能会出现很多看似不标准的解释,但是更容易理解MQTT的内涵,对MQTT十分精通者请忽略此文。
在物联网项目中,经常出现的要求是“有限环境”。什么意思呢,通俗说就是网络可能不太稳定,带宽也可能很小,网速也比较低,硬件MCU性能也很低,要求在这种情况下也能可靠联网传输信息。看到这里大家就会想到我前面提到的短指令中说到的问题了,不是我们认为开发容易好维护就可以的,首先要满足工作环境的需要,项目才可以成功落地,否则都是无用功。
在N年前最初尝试做物联网项目的时候,很多用HTTP协议做硬件设备信息的上报,利用返回结果控制硬件设备执行的项目(其实现在也有人还在使用)。这样硬件设备信息上报的即时性没有问题,但经过服务端发送控制指令去操控硬件设备的时候,及时性就很难满足。因为HTTP是单方向主动请求服务器,有请求才有返回,返回后就断开了。要想服务端与硬件设备再有联系,只能等硬件设备通过HTTP的下一个请求上来才可以,也就是服务端不能主动推送消息给硬件设备。看到这里可能会有很多人会说出N多种基于HTTP服务端推送的方案,但是很抱歉,在物联网环境中都不适合。因为无论是轮询还是长连接,用HTTP维持所消耗的网络资源和硬件性能要求对项目来说都是高昂的,必须考虑项目落地要求的“有限环境”。对于网络不稳定和带宽低(比如移动网络、信号弱的区域等)的环境,极大可能造成项目运行失败,这是不能接受的结果。
那么为什么推荐MQTT协议呢?因为MQTT协议具备以下几点特征:
1、网络开销小,消息头最小只有2字节,这相比HTTP大大降低了网络流量。
2、是可保持的会话,为实现服务端及时推消息提供了条件。
3、是异步消息机制,不会阻塞占用资源。
4、具备异常中断通知机制,可以获得硬件在线信息变化,及时得到掉线消息。
5、使用发布/订阅消息模式,一对多或多对一的消息传输,实现与应用程序的解耦。
6、传输可靠性可控,及三种服务质量,分别是至多一次、至少一次、只有一次。指的是发布者发出的信息,代理服务和订阅者是否收到的情况。
7、客户端程序够轻量,可在很多嵌入式设备中运行。
8、可满足低带宽、高延迟、不稳定的网络环境。
|