用了那么久MQTT,这些知识点你了解吗

来这里,还可以学习HAL库的使用哦

哈喽,小伙伴们,今天来聊一聊什么是MQTT协议,以及常用的几个术语是什么意思,有图有真相哦,欢迎阅读

1、 什么是MQTT

  MQTT(MQ Telemetry Transport,消息队列遥测传输)是近年来出现的一种新型协议,物联网领域会将其作为标准协议。MQTT原本是IBM公司开发的协议,现在则开源了,被人们不断开发着。MQTT是一种能实现一对多通信(人们称之为发布或订阅型)的协议。它由3种功能构成,分别是中介(broker)、发布者(publisher)和订阅者(subscriber)(图2.8)。

  中介承担着转发MQTT通信的服务器的作用。相对而言,发布者和订阅者则起着客户端的作用。发布者是负责发送消息的客户端,而订阅者是负责接收消息的客户端。MQTT交换的消息都附带“主题”地址,各个客户端把这个“主题”视为收信地址,对其执行传输消息的操作。形象地比喻一下,中介就是接收邮件的邮箱。再来详细看一下MQTT通信的机制(图2.9)。首先,中介在等待各个客户端对其进行连接。订阅者连接中介,把自己想订阅的主题名称告诉中介。这就叫作订阅。

  然后发布者连接中介,以主题为收信地址发送消息。这就是发布。

  发布者一发布主题,中介就会把消息传递给订阅了该主题的订阅者。如图2.9所示,如果订阅者订阅了主题A,那么只有在发布者发布了主题A的情况下,中介才会把消息传递给订阅者。订阅者和中介总是处于连接状态,而发布者则只需在发布时建立连接,不过要在短期内数次发布时,就需要保持连接状态了。因为中介起着转发消息的作用,所以各个客户端彼此之间没有必要知道对方的IP地址等网络上的收信地址。

  又因为多个客户端可以订阅同一个主题,所以发布者和订阅者是一对多的关系。在设备和服务器的通信中,设备相当于发布者,服务器则相当于订阅者。

  主题采用的是分层结构。用“#”和“+”这样的符号能指定多个主题。如图2.10所示,/Sensor/temperature/#中使用了“#”符号,这样就能指定所有开头为/Sensor/temperature/的主题。此外,/Sensor/+/room1中使用了符号“+”,这样一来就能指定所有开头是/Sensor/、结尾是/room1的主题。

  像这样借助于中介的发布/订阅型通信,MQTT就能实现物联网服务与多台设备之间的通信。另外,MQTT还实现了轻量型协议。因此它还能在网络带宽低、可靠性低的环境下运行;又因为消息小、协议机制简单,所以在硬件资源(设备、CPU和内存等)受限的条件下也能运行,可以说是为物联网量身定做的协议。MQTT本身还具备特殊的机制,下面我们会对其逐一说明。

2、什么是QoS?

  QoS是Quality of Service(服务质量)的简称。这个词在网络领域表示的是通信线路的品质保证。MQTT里存在3个等级的QoS。“发布者和中介之间”以及“中介和订阅者之间”都分别定义了不同的QoS等级,以异步的方式运行。此外,当“中介与订阅者之间”指定的QoS小于“发布者和中介之间”交换的QoS时,“中介与订阅者之间”的QoS会被降级到指定的QoS。

  • QoS 0指的是最多发送一次消息(at most once)(图2.11)

  发送要遵循TCP/IP通信的“尽力服务”。消息分两种情况,即到达了一次中介处,或没有到达中介处。

  • 接下来的QoS 1是至少发送一次消息(at least once)(图2.12)。

  中介一接收到消息就会向发布者发送一个叫作“PUBACK消息”的响应,除此之外还会根据订阅者指定的QoS发送消息。当发生故障,或经过一定时间后仍没能确认PUBACK消息时,发布者会重新发送消息。如果中介接收了发布者发来的消息却没有返回PUBACK,那么中介会重复收到消息。

  • QoS 2,它指的是准确发送一次消息(exactly once)。

  把它跟QoS 1合在一起使用,就能避免接收到重复的消息(图2.13)。用QoS 2发送的消息里面含有消息ID。中介收到消息后会将消息保存,然后给发布者发送PUBREC消息。发布者再给中介发送PUBREL消息,然后中介会给发布者发送PUBCOMP消息。接下来中介才会依据订阅者指定的QoS,向订阅者传递接收到的消息。

  此外,就QoS 2而言,有时使用的中介会影响消息的传递时间。人们通常使用的是QoS 0,只有要确保信息发送成功时才使用QoS 1和QoS 2,这样一来可以减少网络的负担。后文将会讲到Clean session,其中QoS的设定也是非常重要的。

3、什么是Retain?

  订阅者只能接收在订阅之后发布的消息,但如果发布者事先发布了带有Retain标志的消息,那么订阅者就能在订阅后马上收到消息。

  当发布者发布了带有Retain标志的消息时,中介会把消息传递给订阅了主题的订阅者,同时保存带有Retain标志的最新的消息。此时,若别的订阅者订阅了主题,就能马上收到带有Retain标志的新消息(图2.14)。

4、什么是WILL?

  Will有“遗言”的意思。由于中介的I/O错误或网络故障等情况,发布者可能会突然从中介断开,Will就是专门针对于这种情况的一个机构,它用于定义中介向订阅者发送的消息(图2.15)。

  发布者在连接中介时会用到CONNECT(连接)消息,连接时对其指定Will标志、要发送的消息以及QoS。这样一来,如果连接意外断开,Will消息就会被传递给订阅者。另外,还有一个标志叫作Will Retain。通过指定这个标志,就能跟前面说的Retain达到同样的效果,即在中介处保存消息。

5、什么是Clean session?

  Clean session用于指定中介是否保留了订阅者的已订阅状态。用CONNECT消息连接时,订阅者把Clean session标志设定为0或1。0是保留session,1是不保留session。

  若指定Clean session为0且中介已经连接上了订阅者,则中介需要在订阅者断开连接后保留订阅的消息。另外,如果订阅者的连接已经断开,且发布者已经发布了QoS 1、QoS 2的消息给已订阅的主题时,中介则会把消息保存,等订阅者再次连接时发送给订阅者(图2.16)。

  若指定Clean session为1并连接,中介就会废弃以往保留的客户端信息,将其当成一次“干净”的连接来看待。此外,订阅者断开连接时,中介也会废弃所有的信息。

内容摘自:图解物联网一书,非广告文~

(0)

相关推荐

  • 当下流行的物联网协议MQTT简介

    概述 MQTT是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器之间通信的桥梁. MQTT协议是为大量计 ...

  • mqtt协议 学习笔记

    文章目录 1. MQTT协议介绍 2. MQTT协议特性 3. MQTT协议的通信模型 3. MQTT的主题 4. MQTT协议的连接与会话 5. MQTT 报文格式 5.1 报文类型汇总 i. 连接 ...

  • MQTT QOS & Retained Message

    项目终于基本完成了,记录一下,由于客户端误设置了发布保留消息,导致服务器每次上线都会收到客户端最后一条消息,先去解读并改了QOS的设置,并没有用,然后才发现有Retained Message的设置,直 ...

  • EMQ连接内存消耗

    Erlang进程消耗 EMQ对客户端链接使用链接进程(emqtt_client)和session进程(emqtt_session)分开的策略. 当一个mqtt的客户端连接到EMQ的服务器上的时候,首先 ...

  • 消息推送标准协议:MQTT

    随着物联网(Internet of Things,IoT)的兴起,机器之间(Machine-to-Machine,M2M)的大规模信息沟通成为重要的课堂,之前HTTP的请求/回答(Request/Re ...

  • 家长期待已久的一年级语文下册各单元知识点...

    家长期待已久的一年级语文下册各单元知识点都梳理好了,温故而知新,可以为师矣!家里有一年级孩子的抓紧替孩子收藏起来,提前打印给孩子系统复习,期末不丢分. 学习语文不外乎就这么几大块内容:字.词.句.段. ...

  • 文中5个知识点,都属高级重复事情,坚持越久意义越大

    作者:黛西 首发公众号:黛西巫巫 (ID:dexiww001) ☆☆☆☆☆☆☆☆☆ 大家好,我是黛西. 我发现,那些每天专注刷快手/看剧/吃鸡的人,他们很难长期坚持一件事情,因为他们害怕无聊. 可笑的 ...

  • 停留在瓶颈很久了怎么办?14个保姆式知识点带你轻松突破!

    图片素材来自网络,版权归原作者,仅供交流 -------------- 有绘画学习的地方,就有原画人的身影 今天,我们分享一个由跟课天使秋月整理的 Jacob Li老师90分钟速涂笔记,希望对你有所帮 ...

  • 《仙姑打老儿丸》,相传已久,驻颜养生功效...

    <仙姑打老儿丸>,相传已久,驻颜养生功效是不虚名的 相传在很久以前,有一位年轻的女子,手里拿着一根木棍,在大街上追着一位须发皆白的老人打.过路的人见了,无不愤然,论相貌,那女子无疑是老者的 ...

  • 老中医私藏许久的几个神效方

    专治顽固不化的老风湿 专治顽固不化的老风湿.类风湿,其药效之猛烈,钻透力之强劲,疗效之神奇,比一般药散和药店的一大堆膏药至少要强一百倍.比风湿一敷灵强十倍.特别对关节肿胀变形也只需要用药一次也一定会大 ...

  • 提分冲刺 | 高中数学必修 选修全部知识点精华归纳总结!

    提分冲刺 | 高中数学必修 选修全部知识点精华归纳总结!

  • 我与我周旋久,宁作我。

    我与我周旋久, 宁作我.

  • 初中化学重要考试知识点梳理总结大全,全部都是历年中考考点

    初中化学 2篇原创内容 公众号 今天化学姐给大家整理了初中化学重要考试知识点梳理总结大全,全部都是历年中考考点.如需下载打印版,请直接拉到文末查看. (点击图片,查看大图)

  • 初中化学高频重要考点——酸碱盐知识点总结

    初中化学 2篇原创内容 公众号 今天化学姐给大家整理了初中化学高频重要考点--酸碱盐知识点总结(基础考点.重难点点突破.易错点分析三大部分).如需下载打印版,请直接拉到文末查看.