对 MQTT 进行探究
#长按上图识别二维码,参与OSC源创会年终盛典#
是一种机器对机器(M2M)的协议,它被广泛地用于 IoT (物联网:Internet of Things)。它是一种面向消息的协议。也是因为这个原因,它是非常轻量级的,被 IoT 生态系统广泛采用。 几乎所有的 都支持通过 MQTT 与几种不同实现的 IoT 智能设备(例如 Arduino,Raspberry Pi 等) 发送接收数据。
当然,还有其他的 IoT 协议,但是 MQTT 是最有效的。
MQTT 是在 1999 年左右被开发出来的,它主要目的是要创建一个带宽受限的协议。此外,它的能耗非常低,这对于 IoT 来说很有吸引力。
这个协议使用了发布——订阅范式,这与面向 HTTP 的请求/响应范式形成对照。它使用二进制消息来交换消息,这是非常低开销的。它在实现上更简单,更优秀,并且是开放的。另一个有趣的方面是 MQTT 使用 TCP 作为传输的底层。所有的这些因素都是为了能更适应 IoT。
上文提到,MQTT实现了发布者-订阅者模式。发布者-订阅者模式将发布消息的客户端(发布者)与接收消息的客户端(订阅者)解耦开来。此外,与主要是同步协议的HTTP相比,MQTT是个异步协议,它不会在等待消息时阻塞客户端。另外,MQTT协议也不要求订阅者和发布者是相互连接的。
如上所述,MQTT是基于消息、实现了发布者-订阅者模式的协议。MQTT其中的关键组件是MQTT代理(broker)。MQTT代理的主要任务是将消息派发给订阅者。即,它从发布者接收消息,然后把消息转发给订阅者。转发消息时,MQTT代理使用话题(topic)来过滤客户端。话题是个字符串,可以通过创建话题级别来组合话题。
话题就像一个虚拟通道,把发布者与它的订阅者连接起来。话题由MQTT代理管理。通过这个虚拟通道,发布者与订阅者解耦,客户端(发布者或订阅者)不必相互知道。由于消息生产者(发布者)和消息消费者(订阅者)间没有直接依赖,所以这个协议是高度可扩展的。
下面这张图描述了MQTT架构:
现在我们有了大概了解,接下来我们通过实际例子来应用一下。MQTT有很多实现,我们使用Eclipse开发的。第一步,安装MQTT代理,根据我们的目的,我们把它安装到树莓派(Raspberry PI)上。要安装Mosquitto,需要添加它所在的仓库,这样我们才能下载。添加仓库之前,有必要添加key验证下载的安装包是否合法。我们可以通过SSH或者来连接树莓派。现在,在终端,敲入以下命令:
最后,添加.list文件:
如何发送一个MQTT消息
假设我们已经成功安装并配置了客户端和服务器,现在我们可以注册一个用户到一个特定的主题,接下来就是等待发布者传入消息。我们可以使用下面的命令来注册一个用户:
如上所示,用户正在等待消息。在这个例子中,我们使用的主题叫swa_news。现在,我们使用MQTT发布者发送主题为swa_news的消息。
这个例子中,MQTT发布者发送了消息“Hello Protocol”,在用户端,我们得到了如下的消息:
如何在Android设备上使用MQTT
最后,我们将使用一个Android MQTT客户端来接收我们发送的消息。下面的视频向我们展示了如何配置一个Android MQTT客户端。
本文希望你通过此文学习到了什么是MQTT协议以及如何使用MQTT向客户端发送消息。
从零开始学做微信小程序,看这些就够了!
ELK日志分析平台la建全过程
12 月北京源创会来听专家分析 AI 浪潮下的数据工程