MQTT 协议 是一种机器对机器(M2M)的协议,它被广泛地用于 IoT (物联网:Internet of Things)。它是一种面向消息的协议。也是因为这个原因,它是非常轻量级的,被 IoT 生态系统广泛采用。 几乎所有的 IoT 云平台 都支持通过 MQTT 与几种不同实现的 IoT 智能设备(例如 Arduino,Raspberry Pi 等) 发送接收数据。 当然,还有其他的 IoT 协议,但是 MQTT 是最有效的。 MQTT 概览MQTT 是在 1999 年左右被开发出来的,它主要目的是要创建一个带宽受限的协议。此外,它的能耗非常低,这对于 IoT 来说很有吸引力。 这个协议使用了发布——订阅范式,这与面向 HTTP 的请求/响应范式形成对照。它使用二进制消息来交换消息,这是非常低开销的。它在实现上更简单,更优秀,并且是开放的。另一个有趣的方面是 MQTT 使用 TCP 作为传输的底层。所有的这些因素都是为了能更适应 IoT。 |
MQTT 消息模式上文提到,MQTT实现了发布者-订阅者模式。发布者-订阅者模式将发布消息的客户端(发布者)与接收消息的客户端(订阅者)解耦开来。此外,与主要是同步协议的HTTP相比,MQTT是个异步协议,它不会在等待消息时阻塞客户端。另外,MQTT协议也不要求订阅者和发布者是相互连接的。 MQTT 发布者-订阅者模式如上所述,MQTT是基于消息、实现了发布者-订阅者模式的协议。MQTT其中的关键组件是MQTT代理(broker)。MQTT代理的主要任务是将消息派发给订阅者。即,它从发布者接收消息,然后把消息转发给订阅者。转发消息时,MQTT代理使用话题(topic)来过滤客户端。话题是个字符串,可以通过创建话题级别来组合话题。 话题就像一个虚拟通道,把发布者与它的订阅者连接起来。话题由MQTT代理管理。通过这个虚拟通道,发布者与订阅者解耦,客户端(发布者或订阅者)不必相互知道。由于消息生产者(发布者)和消息消费者(订阅者)间没有直接依赖,所以这个协议是高度可扩展的。 下面这张图描述了MQTT架构:
|
MQTT 使用方法现在我们有了大概了解,接下来我们通过实际例子来应用一下。MQTT有很多实现,我们使用Eclipse开发的Mosquitto。第一步,安装MQTT代理,根据我们的目的,我们把它安装到树莓派(Raspberry PI)上。要安装Mosquitto,需要添加它所在的仓库,这样我们才能下载。添加仓库之前,有必要添加key验证下载的安装包是否合法。我们可以通过SSH或者远程桌面连接来连接树莓派。现在,在终端,敲入以下命令: wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
然后,导入key: sudo
apt-key add mosquitto-repo.gpg.key
最后,添加.list文件: sudo
wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
这样,MQTT服务器就安装到树莓派上了。这个服务器就是我们的MQTT代理。现在我们需要安装客户端(发布者和订阅者)。本例中,我们把客户端和服务器安装在同一个树莓派,你也可以安装到不同的PC/服务器或者物联网(IoT)主板上。 apt-get install mosquitto-clients
|
如何发送一个MQTT消息
|
本文标题:对 MQTT 进行探究
本文地址:https://www.oschina.net/translate/mqtt-protocol-tutorial
参与翻译:douxingxiang, wnull, xufuji456, 无若, Robbie_Zhu