【物联网学习系列分享】之MQTT协议介绍-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15992|回复: 7

【物联网学习系列分享】之MQTT协议介绍

[复制链接]
发表于 2017-6-29 11:47 | 显示全部楼层 |阅读模式
本帖最后由 michael_llh 于 2017-6-29 11:49 编辑

        本次我们将介绍另外一个物联网两种常用到的协议,MQTT,这个协议的全称是Message Queuing Telemetry Transport,消息队列遥测传输,是由IBM提出来的。这里我们在说一些协议是什么东西吧,该怎么去理解它,其实就是在数字的时代里,信息是由0、1构成的,那么对于一个字符假设我们说是a,那么怎么用0、1去表示,这其中就有很大的问题,所以我们需要通过某一定定义,比如说用0101010这样的一串字符就表示说是a这个字符,那么这就是一个规定制定的过程,这样可以引出我们字符编码的概念,通过定义某一种01串的顺序来表示某一个字符,然后大家都认可这样的规定,在计算机和显示制作上自然而然就可以达到统一,并正确显示我们想要的内容。那么协议是对于通信而言的,也就是说通信中的01串的规定就叫做协议,那么我们网络中的01顺序规定也是属于通信相关的,也叫作协议。

       那么现在我们具体看一下什么叫做MQTT。

       首先我们需要了解,MQTT提出的背景,在什么情况下我们适合用这个,而且我们为什么在现在物联网中很多用到了MQTT,这个是我们需要探索的点,这样了解了协议的背景才能够具体去使用它。

       MQTT他不是一种实时通信的手段,和我们常用的QQ、微信不同,这两个聊天工具是一种实时聊天,什么叫实时,就是两者之前不存在时间差,你发一个消息,然后我立马就能够收到这个消息,瞬时的一个特性,但是对于MQTT,它是一个什么样的特点呢,我们大家都知道在微信中我们有用到公众号,那么这个公众号它是需要我们先去关注这个公众号,然后公众号比如说每天一更,或者是每周一更,这样我们就可以在某个时间节点上收到公众号推送的消息,那对于MQTT就是类似这样的过程。

       那么为什么说MQTT是非常适用于物联网中的呢?比如说我们举个例子来说明,我们在房间里头自动控制空调的开关来调整温度维持在人体最合适的温度内,那么该如何设计,第一我们肯定需要一个温度计,然后需要将温度计的数据传输到处理单元,处理单元根据温度的高低进行调整空调的开关和温度。那么温度计传输数据是怎样的,实时传输吗,我们不需要这样的数据,对于温度而言,它的变化并不是突变的,而是一个渐变的过程,实时数据对我们的参考意义不大,所以我们可以采取一段时间内获取一次温度数据,而在这个场景下我们就可以使用MQTT,处理单元像温度采集单元去订阅这个温度数据,当温度采集单元的时间到了,或者是满足其他条件的情况下,那么就像处理单元去推送这个数据即可,这样就很符合MQTT的协议方式。当然在很多场景下都和MQTT这种实现方式是很吻合的,所以MQTT就变得流行起来。

       MQTT的协议实现是比较复杂的,包括他的格式规范都是比较复杂的,不想我们之前所提到的HTTP协议我们相对可以讲清楚一点,但是大家也不要误以为HTTP比较简单,介绍HTTP协议的书籍也是厚厚的一大本都讲不完。这些人类在探索中逐渐积累下来的东西都相对比较复杂,不是那么容易去理解。

       那么我们下面简单的通过几张图来帮助大家更好的理解MQTT,只能说是大概进行一些基本概念的梳理,不能够做到很深入的剖析,如果要深入的了解这个协议还是需要通过官网文档进行查阅。

       我们还是以上面提到的例子做为图例,我们有三个客户端,每个客户端扮演不同的角色,比如说Client A是温度的提供者,Client B可能就是空调,Client C可能就是温度的显示单元。那么Broker就是处理单元,也就是我们后面会一直提到的服务器方。

图片2.png
      
       那么当Client A发布温度消息之后,Broker就会在某种条件下想Client B和Client C推送温度信息,那么这两个客户端就可以获得温度信息,从而做出相应的动作,空调可以控制温度的高低,而温度显示单元则显示温度。

图片1.png
      
       相信通过这两张图片大家能够比较清楚的理解MQTT的一个工作方式,当然这里我们省略了很多细节,所以大家如果需要深入理解的话还是要看官方文档,MQTT是有自己的官网,上面也有详细的Documention,但是都是英文的,也有国内的人翻译的版本,需要深入了解的大家就自行深入啦。


发表于 2017-7-8 18:35 | 显示全部楼层
最近也在学习这个
 楼主| 发表于 2017-7-12 22:43 | 显示全部楼层
琛琛 发表于 2017-7-8 18:35
最近也在学习这个

恩,可以交流,有什么错误也欢迎帮忙指出!
发表于 2017-11-16 20:41 来自手机 | 显示全部楼层
请问 假如clientA和clientB 都是显示设备 并且都需要来修改温度设定值 client C 是空调,根据设定温度来调节室温。那么
发表于 2017-11-16 20:44 来自手机 | 显示全部楼层
请问 假如clientA和clientB 都是显示设备 并且都需要来修改温度设定值 client C 是空调,根据设定温度来调节室温。那么A 和B发布同一个主题 会不会产生错误?
发表于 2019-9-27 17:48 | 显示全部楼层
DKid 发表于 2017-11-16 20:44
请问 假如clientA和clientB 都是显示设备 并且都需要来修改温度设定值 client C 是空调,根据设定温度来调 ...

应该会有管理者机制,我认为可能跟系统里的“锁”的概念类似。
发表于 2021-8-27 08:19 来自手机 | 显示全部楼层
最近正在学习。正好读到这个帖子。盲猜测这种情况应该发到不同主题,由程序来控制冲突
发表于 2021-12-8 10:28 | 显示全部楼层
我最近也在看这个,有没有技术交流群,可以一起交流一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 02:35 , Processed in 0.351479 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表