什么是MQTT协议?
MQTT(Message Queue Telemetry Transmission Protocol)是IBM于1999年专门针对物联网等应用场景开发的轻量级双向消息传输协议。主要是解决物联网中使用的设备之间的通信问题,以及这些设备与后端应用系统之间的通信问题。
为什么需要MQTT(或类似的)协议?
随着智能硬件和移动互联网技术的快速发展,传统的互联网协议越来越难以满足物联网的需求,体现在:移动网络价格昂贵,带宽低,可靠性差;在嵌入式设备中运行,处理器和内存资源有限;海量在线设备产生海量数据,给云带来极大的网络开销和处理压力。
MQTT是如何工作的
MQTT包括两部分:客户端和代理。以智能家居系统为例,终端智能家电和手机是客户端,云中心是代理。首先,客户端向代理发送请求,代理收到请求后对客户端进行身份验证。认证通过后,客户端和代理之间建立TCP长连接通道。客户端通过该通道订阅多个关注的话题,同时当自身状态发生变化时,向相应的话题发布消息,代理将消息发送给所有正在订阅该话题的客户端,如下图所示。与HTTP不同,MQTT是多对多的通信协议。设备不直接连接,而是通过代理相互通信。它是一个自然的异步协议,可以将请求者和响应者分离开来。
MQTT协议有什么好处?
MQTT优化了物联网场景的设计,综合考虑了网络的可接入性、消息的连通性、能耗等方面。具体来说:
第一,它极其轻量级,可以用8位系统和30K空间运行MQTT客户端。
第二,它是为不稳定的网络设计的。一般来说,传输协议都是基于稳定的网络,会针对这个稳定的网络做一些优化。而MQTT则相反,它更多的考虑到了网络的不确定性,也非常简单,只有两个最小传输字节,使得它在恶劣的网络条件下仍然有很好的消息到达率。
第三,它的消息交互方式不同于传统意义上的,采用发布订阅的方式。当一个数据源发布一条消息时,多个订阅者可以同时接收到该消息,这对于很多设备互联的物联网场景来说是很灵活的。
第四,有一个消息发布的QoS机制。用户可以根据应用场景需求选择“最多一次”、“至少一次”或“仅一次”的传输质量,权衡效率和质量。
第五,客户异常中断的最后意愿和测试通知机制。当一个设备连接不上的时候,服务器端有一个特殊的机制,可以立刻知道设备出了什么问题,从而快速反馈,对某个节点进行一定的补偿。
MQTT取得了哪些成功的实践?
1.物联网云
Evothings:国外物联网生态平台,提供一整套软硬件开发工具,帮助开发者搭建智能硬件原型,开发消息推送服务。
Yeelink:国内最大的物联网云平台之一,为用户和智能硬件开发者提供传感器云服务,通过实时数据处理实现可靠的状态监测。
2.实时消息推送
脸书是较早大规模采用MQTT协议的互联网巨头。它在移动客户端使用MQTT来更新通知、消息、书签等。
云等平台提供MQTT协议的实时消息服务,可以实时推送消息到任意设备,快速发送消息给百万用户,实现单个设备一对一推送,实时显示在线用户和使用情况。目前为数万开发者和上亿终端提供推送服务。搜狐等国内公司也使用MQTT作为Android手机客户端和服务器之间推送消息的协议。
MQTT还有哪些问题?
1.在网络变化频繁或不稳定的2G/3G网络环境中性能不佳。
每次TCP断开或网络断开后,客户端将立即启动TCP重新连接。连接成功后,它会依次发送CONNECT命令和subscribe命令。当网络频繁切换或不稳定时,上述机制会在一定程度上加重本已难以承受的薄弱网络负担。一些参考资料指出,可以通过在业务层面调整重连策略和等待超时来优化问题。此外,其他基于UDP传输的物联网协议,如CoAP,对此类网络有较好的适应性。
2.没有TCP/IP的支持,MQTT无法应用于终端环境。
MQTT-SN(MQTT For Sensor Networks)协议可以作为补充。它是针对非常有限的同类传感器设计的,可以发送基于IEEE 802.15.4等无线局域网的UDP包,然后通过MQTT-SN网关与MQTT broker建立连接。流程大致如下:
MQTT推荐资源
Mosca:基于Nodejs实现的一款功能较完善的broker
Paho: C/C++、Python、Java等语言的MQTT 客户端库
mosquitto:一款功能完善的开源原生broker
本文章来源于互联网,如有侵权,请联系删除!
在现代生产企业中,生产线的自动化系统一般采用以 PLC 为主要节点的控制、通信网络,最常用的是现场总线协议;同时在企业的管理经营系统一般采用计算机为主要节点的通信网络,以 TCP/IP 协议为主,如何实现不同应用系统间的数据通信,打通不同通信协议间的数据通路,…