物联网开发实战
郭朝斌
小米生态链企业秒秒测 IoT 事业部总监,前诺基亚高级工程师
17380 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
物联网开发实战
15
15
1.0x
00:00/00:00
登录|注册

08 | MQTT:在实践中掌握一个通信协议

你好,我是郭朝斌。
在基础篇的第 3 讲中,我介绍了几种物联网系统中常用的网络协议。它们是物联网设备之间沟通的“语言”,使用同一种语言,双方才能通信成功。
那么,在这么多网络协议当中,最流行的是哪一种呢?毫无疑问,是 MQTT 协议,它甚至已经成为物联网系统事实上的网络协议标准。如果你想从事物联网开发,就一定要掌握 MQTT。
所以这一讲,我就会带你了解 MQTT,在实践中熟悉它的特性。

体验 MQTT

为了让你对 MQTT 有一个直观的印象,我先带你体验一下它的通信过程,
第一步是安装 hbmqtt,它是一个开源的基于 Python 语言的 MQTT Broker 软件,正好包括我们需要使用一些工具。跟其他选择相比,这个软件安装起来非常方便,因为它在 Python 的 PYPI 软件仓库中就有,所以你通过 pip 命令就可以安装。这也是选择使用它的主要原因。
不过要注意的是,hbmqtt 是基于 Python3 实现的,因此这里使用的是 pip3 工具。
pip3 install hbmqtt
安装完成后,我们就可以使用 hbmqtt 中提供的 hbmqtt_sub 和 hbmqtt_pub 这两个命令行工具了。通过名字,你应该也可以看出 hbmqtt_sub 可以充当订阅者的角色;hbmqtt_pub 可以作为消息的发布者
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

MQTT协议在物联网系统中扮演着重要角色,本文通过实践向读者展示了如何掌握这一通信协议。作者首先通过安装hbmqtt并使用其命令行工具进行订阅和发布消息,展示了MQTT的简单易用。文章还强调了MQTT生态的完善,包括开源项目、不同语言的客户端实现以及商业公司提供的更丰富的Broker实现,为开发者提供了丰富的选择和支持。此外,文章还分析了MQTT协议本身的优秀设计,包括契合物联网应用场景的发布-订阅模式、轻量级特性、低功耗优化设计、多种服务质量等级以及数据安全支持。MQTT协议的轻量级特性体现在采用二进制的编码格式,以及消息交互流程设计的简单性。另外,MQTT协议注重低功耗的优化设计,如Keepalive机制和重复主题特性,以节约电量和网络资源。此外,MQTT协议设计了3种不同的QoS级别,以应对网络环境不稳定的问题。最后,文章介绍了MQTT协议的安全传输机制,包括用户名/密码验证和SSL/TLS加密通信方式。总的来说,本文通过实例和分析,全面展现了MQTT协议的简单易用、优秀设计以及在物联网系统中的重要性。MQTT协议生态丰富,采用适合物联网应用场景的发布-订阅模式,具有轻量级特性和低功耗优化设计,同时支持多种服务质量等级和数据安全传输。这使得MQTT成为物联网系统中的重要选择,为开发者提供了丰富的支持和灵活性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《物联网开发实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(32)

  • 最新
  • 精选
  • 老师,我试了一下你给的代码 hbmqtt_sub --url mqtt://mqtt.eclipse.org:1883 -t /geektime/iot,这个URL有问题mqtt.eclipse.org我怎么也连不上;但是换成它页面上给的mqtt.eclipseprojects.io就没有问题。还有python 3.9 似乎重写了一些关于lock的代码,hbmqtt会有问题,Python 3.8就没问题。

    作者回复: 对,也可以尝试用mosquitto的地址

    2020-12-18
    5
    13
  • like_wind
    自己用EMQ X搭建了一个broker服务器,收发消息成功,支持国产软件,不过EMQ文档真的很全。附上文档链接:https://docs.emqx.cn/cn/broker/latest/getting-started/install.html

    作者回复: 👍

    2020-12-22
    10
  • 曙光
    测试了,如果pub和sub都是2,就是2组4次交互。如果只有pub为2,一组4次交互。但如果pub是1,sub为2,则测试结果和sub,pub都为1的情况一样,sub和broker之间不是4次交互。

    作者回复: 赞👍

    2021-04-14
    4
  • YueShi
    Client 在重复发送一个主题的消息时,可以从第二次开始,将主题名长度设置为 0,这样 Broker 会自动按照上次的主题来处理消息。这种情况对传感器设备来说十分常见,所以这个特性在工作中很有实际意义。 这段没有太懂, 有老哥给提示一下吗? 多谢了

    作者回复: 比如发生是主题是“/geektime/iot”,第一次需要在信息体中包含这个主题的字符,第二次就可以省掉这个主题名字了。

    2020-11-27
    3
  • ACK
    作为智能锁嵌入式开发者,觉得老师讲的东西很受用😃

    作者回复: 谢谢你的留言:)

    2020-11-25
    2
    3
  • 9ambition
    针对思考题,我的回答是这样子的: 对于发布者(pub),采用QoS = 1,也就意味着就算broker已经收到此发布者发送的数据,发布者还是会重复一样的数字,对于发布者本身来说就是不想自己发出的每一条信息被遗漏。 对于订阅者(sub),采用QoS = 2, 说明sub在面对订阅主题时,每一次从broker获得数据前都会经过publish, pubreck, pubrel, pubcomp这四步后才能从订阅主题处获得一次数据。 所以broker的行为只需要从pub-broker和broker-sub两步看就可以: 对于pub-broker的部分,broker只需要进行puback来确认broker已经收到pub发送的数据了。 对于broker-sub的部分,broker一定要先确认自己执行了从pub获得的数据发出去的行为,也就是publish,接着确认收到sub的回复:pubrec来说明broker确实成功把数据发出去了;接着确认broker确实把数据发出去了,也就是pubrel;最后让sub回复pubcomp来说明sub确实收到broker发出的数据了。就相当于publish和pubrec是确认broker发数据的行为,pubrel和pubcomp是确认broker的数据内容已经被发送和被sub接收。

    作者回复: 需要实际实验一下,测试过程不太复杂

    2021-02-17
    1
  • 大王叫我来巡山
    有java版本的 mqtt broker 么 最好是springboot开箱即用,且可开发的那种

    作者回复: hivemq是Java的。 从架构看,broker和springboot之间最好有消息队列,没有太直接的关系

    2020-12-09
    1
  • InfoQ_Albert
    经实践SSL 证书已经可用,利用mqtts发布和订阅消息成功。

    作者回复: great!感谢你的留言

    2020-11-26
    2
    1
  • 新味道
    https://mqtt.eclipse.org/ 打不开。

    编辑回复: https://mosquitto.org/

    2022-01-16
  • 假行僧
    老师,遇到错误MOSQ_ERR_EAI代表什么意思?

    作者回复: 连接服务器的错误。有更详细的信息吗?

    2021-04-25
收起评论
显示
设置
留言
32
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部