1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 《物联网开发实战》08 MQTT:在实践中掌握一个通信协议(学习笔记)

《物联网开发实战》08 MQTT:在实践中掌握一个通信协议(学习笔记)

时间:2020-04-02 07:24:58

相关推荐

《物联网开发实战》08 MQTT:在实践中掌握一个通信协议(学习笔记)

仅作为本人学习《物联网开发实战》的学习笔记,原课程链接:极客时间《物联网开发实战》——郭朝斌

文章目录

体验 MQTTMQTT 的生态很完善MQTT 自身的“基因”很强大发布-订阅模式轻量级协议:减少传输数据量低功耗优化:节约电量和网络资源3种 QoS 级别:可靠通信安全传输

体验 MQTT

我这里将通过 EMQX 和 MQTTX 两个软件来体验 MQTT,

首先下载 EMQX,下载链接:https://www.emqx.io/zh/downloads

我下载的是 windows 版本,使用方法很简单,在终端(控制台)运行emqx start即可。

开启 emqx 之后,在浏览器打开网站127.0.0.1:18083(ip地址可以是本机任意网口的ip,或者回环地址,端口号为 18083),输入用户名和密码,默认用户: admin,默认密码:public,

随后就进入了 emqx 控制台界面。

接着下载 MQTT X,下载链接:https://mqttx.app/zh

我同样下载的是 windows 版本,运行 MQTTX 后,新建一个连接(由于只是简单测试,所以只设置两个必填项,即连接名和目标IP,其他都默认)

成功连接上 emqx 的控制台,

也可以在控制台界面查看这个客户端信息,

简单地创建一个 Topic ,

对该 topic 发布信息,然后在通信窗口上显示了接收的信息,测试成功。

MQTT 的生态很完善

经过上面的体验, MQTT 看起来很简单,这主要得益于 MQTT 协议出现的时间很久远,而且功能强大。长期的使用和沉淀使得 MQTT 的生态非常完善,而生态是技术标准能够主导行业的关键。所以使用 MQTT 的时候会觉得很方便,可供挑选的方案也很多。

比如上面用到的 EMQX,它是一款国产的软件,类似的 MQTT Broker 软件,还可以选择 hbmqtt 或 Mosuitto 等等。

而上面使用到的 MQTTX 一款国产软件,支持中文语言,这类软件称为 MQTT 客户端。

MQTT 自身的“基因”很强大

阿里云、华为云、腾讯云等大厂们不约而同地选择 MQTT 协议作为物联设备的“第一语言”,不仅是因为 MQTT 生态完善,MQTT 协议本身的优秀设计也是重要的因素。

它在设计上的优点体现在哪呢?我(郭老师)想主要有五个方面:

契合物联网大部分应用场景的发布-订阅模式。能够满足物联网中的资源受限设备需要的轻量级特性。时刻关注物联网设备低功耗设计的优化设计。针对物联网中多变的网络环境提供的多种服务质量等级。支持在物联网应用中越来越被重视的数据安全。

——原文

发布-订阅模式

在软件架构中,发布订阅是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者)。而是将发布的消息分为不同的类别,无需了解哪些订阅者(如果有的话)可能存在。同样的,订阅者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些发布者(如果有的话)存在。

——百度百科

刚才体验过的通信过程,是一个发布者和一个订阅者的情况。上面的 test 订阅了 topic1 这个主题,所以发送信息到 topic1 主题后,test 就能接收到发送的信息;如果再新建一个连接(下图的 test2),test2 向 topic1 发送数据时,test 也能收到对应的信息,

test2 这个连接由于没有订阅 topic1 ,所以向 topic1 发送数据时,不能接收到数据。

采用发布-订阅模式,让 MQTT具有很多优点,比如让一个传感器数据触发一系列动作;网络不稳定造成的临时离线不会影响工作;方便根据需求动态调整系统规模等。这使得它能满足绝大部分物联网场景的需求。

——原文

轻量级协议:减少传输数据量

MQTT 是一个轻量级的网络协议,这一点也是它在物联网系统中流行的重要原因。毕竟物联网中大量都是计算资源有限、网络带宽低的设备。

这种轻量级体现在两个方面

一方面,MQTT 消息采用二进制的编码格式,相比于 HTTP 协议的文本格式,二进制编码格式可以充分利用字节位,减少网络数据传输量。

图片来源:课程原文

第二个字节表示数据包头部和消息体的字节共个数,其中最高位表示有没有第三字节的存在,来和第二个字节一起表示字节共个数。

如果有第三个字节,那它的最高位表示是否有第四个字节,来和第二个字节、第三个字节一起表示字节总个数。依此类推,不过最多到第五个字节,所以可以表示的最大数据包长度有256MB。

轻量级的另一方面,体现在消息的具体交互流程设计非常简单。

图片来源:课程原文

低功耗优化:节约电量和网络资源

MQTT 协议的低功耗优化主要体现在对能耗和通信次数的优化。

比如,MQTT 协议有一个 Keepalive 机制。它的作用是让 Client 和 Broker 能在双方连接中断时及时发现并重新连接。该机制原理很简单,在 Client 连接到 Broker 时设置了一个 Keepalive 时间,如果双方在这个时间内没有接收到新的数据包,那么就判断连接已断开。

但是 Client 和 Broker 不可能时刻都在传输主题,MQTT 的解决方案是定义了 PINGREQ 和 PINGRESP 这两种消息类型。它们都没有可变头部和消息体,即只有 2 个字节的大小。Client 和 Broker 通过发送这两个消息,就能够满足 Keepalive 机制的要求(如果在 Keepalive 时间内,双方有数据传输,那么就不用发送这两个消息)。

除了 Keepalive 机制,MQTT 5.0 中的重复主题特性也能节省网络资源,Client 重发发送一个主题的消息时,从第二次发送开始,将主题名长度设为0,Broker 会自动按照上次的主题来处理消息。

3种 QoS 级别:可靠通信

由于物联网设备经常处在网络不稳定的场景下,所以 MQTT 协议设计了 3 种不同的 QoS(Quality of Service,服务质量)级别。可以根据场景的网络状态,来选择不同的 QoS 级别。

QoS 的 3 种级别:

QoS 0,消息最多收到一次,即消息可能丢失,但是不会重复。QoS 1,消息至少收到一次,即消息保证送达,但是可能重复。QoS 2,消息只会收到一次,即消息有且只有一次。图片来源:课程原文

安全传输

MQTT 提供了用户名+密码的机制,在建立连接过程中,它可以通过判断用户名和密码的正确性,来筛选有效连接请求。

但是在明文传输方式下,用户名和密码可能被其他人截获,所以我们还需要靠其他方式来实现安全传输。

MQTT 协议支持 SSL/TLS 加密通信方式,这方面的内容我了解不多,感兴趣的话可以参考下面这篇文章。

EMQ X MQTT 服务器启用 SSL/TLS 安全连接

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。