什么是MQTT?
MQTT(消息队列遥测传输)是一种轻量级的发布/订阅消息传输协议,专为M2M(机器对机器)遥测在低带宽环境中设计。该协议由Andy Stanford-Clark(IBM)和Arlen Nipper于1999年为了通过卫星连接油管遥测系统而设计。最初是私有协议,2010年发布为免版税,2014年成为OASIS标准。
MQTT原名为“消息队列遥测传输”,现在简称为MQ遥测传输。随着物联网(IoT)部署的增加,它正迅速成为主要协议之一。
MQTT版本
- MQTT v3.1.0
- MQTT v3.1.1 – 目前普遍使用
- MQTT v5 – 目前使用有限
- MQTT-SN – 见后面的说明
MQTT最初设计于1999年,多年来一直在TCP/IP网络上使用。目前普遍使用的是MQTTv3.1.1版本。v3.1.0和v3.1.1版本之间的区别很小,GitHub上有一个页面详细介绍了这些主要区别。
最新的MQTT版本(v5),于2018年1月获批准。如果你想了解为什么没有v4版本,可以参考这里。
更多信息可参阅 MQTT v5.0的新功能概览。
MQTT-SN简介
MQTT-SN约在2013年制定,设计用于UDP、ZigBee等传输方式。目前MQTT-SN的普及程度不高,其规范多年未变,但随着物联网部署的开始,这一状况预计将改变。
MQTT客户端
MQTT客户端不像电子邮件地址、电话号码等拥有地址,因此你不需要为客户端分配地址,就像大多数消息系统一样。
对于MQTTv3.1.1,Eclipse Paho项目提供了几乎所有编程语言和主要操作系统(Linux、Windows、Mac)的客户端软件。
目前,Paho客户端v1.5.1已支持MQTTv5.0。
MQTT代理或服务器
最初的术语是代理,但现在已标准化为服务器。目前有许多MQTT代理可用于测试和实际应用。最受欢迎的自托管代理之一是Mosquitto,还有商业代理如HiveMQ。Mosquitto是一个免费的开源MQTT代理,可在Windows和Linux上运行。此外,Eclipse提供了一个免费的公共MQTT代理和COAP服务器,供测试使用。
MQTT通过WebSockets
WebSockets允许将MQTT数据直接传送到Web浏览器。这很重要,因为Web浏览器可能成为显示MQTT数据的默认界面。JavaScript MQTT客户端提供了对Web浏览器的MQTT websocket支持。
MQTT安全性
MQTT支持多种认证和数据安全机制。需要注意的是,这些安全机制是在MQTT代理上配置的,客户端必须遵守所配置的机制。
MQTT课程
针对初学者的逐步指南——MQTT 3.1.1基础课程
常见问题
如果你熟悉Web和电子邮件,可能会发现MQTT与它们非常不同。以下是一些我遇到的问题,也在其他网站和论坛上看到的问题,可能会有所帮助:
Q: MQTT通常使用哪个端口?
A: 标准端口是1883。
Q: 能否在没有代理的情况下使用MQTT?
A
: 不可以,MQTT是基于代理的。
Q: MQTT如何处理多个客户端?
A: MQTT服务器可以同时处理成千上万的客户端。
Q: MQTT是否支持广播消息?
A: 是的,通过发布/订阅模型,MQTT支持广播。
回复