MQTT 协议

article/2025/11/11 15:42:52

MQTT 简介

MQTT是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点得它对很多场景来说都是很有的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联网环境(loT)。与HTTP协议一样,MQTT协议也是应用层协议,工作在TCP/IP四层模型中的最上层(应用层),构建与TCP/IP协议上。MQTT最大的优点在于,可以以极少的代码和有限的宽带,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议、使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT 的主要特性

MQTT 协议是为工作在低带宽、不可靠网络的远程传感器和控制设备之间的通讯而设计的协议,它具 有以下主要的几项特性:

①、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。

②、基于 TCP/IP 提供网络连接。主流的 MQTT 是基于 TCP 连接进行数据推送的,但是同样也有基于 UDP 的版本,叫做 MQTT-SN。这两种版本由于基于不同的连接方式,优缺点自然也就各有不同了。

③、支持 QoS 服务质量等级。根据消息的重要性不同设置不同的服务质量等级。

④、小型传输,开销很小,协议交换最小化,以降低网络流量。这就是为什么在介绍里说它非常适合"在物联网领域,传感器与服务器的通信,信息的收集",要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了,在手机移动应用方面,MQTT 是一种不错的 Android 消息推送方案。

⑤、使用 will 遗嘱机制来通知客户端异常断线。

⑥、基于主题发布/订阅消息,对负载内容屏蔽的消息传输。

⑦、支持心跳机制。

MQTT 协议

MQTT 是一种基于客户端-服务端架构的消息传输协议,所以在 MQTT 协议通信中,有两个最为重要的角色,它们便是服务端和客户端。

服务端

MQTT 服务端通常是一台服务器(broker),它是 MQTT 信息传输的枢纽,负责将 MQTT 客户端发送来的信息传递给 MQTT 客户端;MQTT 服务端还负责管理 MQTT 客户端,以确保客户端之间的通讯顺畅,保证 MQTT 信息得以正确接收和准确投递。

客户端

MQTT 客户端可以向服务端发布信息,也可以从服务端收取信息;我们把客户端发送信息的行为称为 “发布”信息。而客户端要想从服务端收取信息,则首先要向服务端“订阅”信息。“订阅”信息这一操作 很像我们在使用微信时“关注”了某个公众号,当公众号的作者发布新的文章时,微信官方会向关注了该公众号的所有用户发送信息,告诉他们有新文章更新了,以便用户查看。

MQTT 主题

上面我们讲到了,客户端想要从服务器获取信息,首先需要订阅信息,那客户端如何订阅信息呢?这里我们要引入“主题(Topic)”的概念,“主题”在 MQTT 通信中是一个非常重要的概念,客户端发布信息以及订阅信息都是围绕“主题”来进行的,并且 MQTT 服务端在管理 MQTT 信息时,也是使用“主题”来控制的。

客户端发布消息时需要为消息指定一个“主题”,表示将消息发布到该主题;而对于订阅消息的客户端 来说,可通过订阅“主题”来订阅消息,这样当其它客户端或自己(当前客户端)向该主题发布消息时,MQTT 服务端就会将该主题的信息发送给该主题的订阅者(客户端)。

MQTT 发布/订阅特性

从以上实例我们可以看到,MQTT 通信的核心枢纽是 MQTT 服务端,它负责将 MQTT 客户端发送来的信息传递给 MQTT 客户端,还负责管理 MQTT 客户端,以确保客户端之间的通讯顺畅,保证 MQTT 信息得以正确接收和准确投递。

正是因为有了服务端对 MQTT 信息的接收、储存、处理和发送,客户端在发布和订阅信息时,可以相 互独立、且在空间上可以分离、时间上可以异步,这就是 MQTT 发布/订阅的特性:客户端相互独立、空间上可分离、时间上可异步,具体介绍如下:

⚫ 客户端相互独立:MQTT 客户端是一个个独立的个体,它们无需了解彼此的存在,依然可以实现 信息交流。譬如在上面的实例中,开发板客户端在发布“芯片温度”信息时,开发板客户端本身完全不知道有多少个 MQTT 客户端订阅了“芯片温度”这一主题;而订阅了“芯片温度”主题的手机和电脑客户端也完全不知道彼此的存在,大家只要订阅了“芯片温度”这一主题,MQTT 服务端就会在每次收到新信息时,将信息发送给订阅了“芯片温度”主题的客户端。

⚫ 空间上分离:空间上分离相对容易理解,MQTT 客户端以及 MQTT 服务端它们在通信时是处于同一个通信网络中的,这个网络可以是互联网或者局域网;只要客户端联网,无论他们远在天边还是近在眼前,都可以实现彼此间的通讯交流;其实网络通信本就是如此,所以并不是 MQTT 通信所特有的。

⚫ 时间上可异步:MQTT 客户端在发送和接收信息时无需同步。这一特点对物联网设备尤为重要,前面我们也介绍了,MQTT 从诞生之初就是专为低带宽、高延迟或不可靠的网络而设计的,高延迟和不可靠网络必然就会导致时间上的异步;物联网设备在运行过程中发生意外掉线是非常正常的情况,我们使用上面的实例二的场景来作说明,当开发板在运行过程中,可能会由于突然断电(假设开发板是通过电源适配器供电的)导致掉线,这时开发板会断开与 MQTT 服务端的连接。假设此时我们的手机客户端向开发板客户端所订阅的“LED 控制”主题发布了信息,而开发板恰恰不在线,这时,MQTT 服务端可以将“LED 控制”主题的新信息保存,待开发板客户端再次上线后,服务端再将“LED 控制”信息推送给开发板。所以这就必然导致了,手机发送信息与开发板接收信息在时间上是异步的。

 


http://chatgpt.dhexx.cn/article/WYsHX0fS.shtml

相关文章

通过QI协议发射和接收的无线充需要做CE认证吗?RED指令?

QI协议其实是一个技术协议,和CE认证没有多大的关系。做了QI认证,还是要做CE认证的。具体的指标是RED指令。 关于如何办理QI认证和CE认证,想更多了解vvv! WPC官网认证产品页面上有更新一款mophie新的发射器,此发射器为定…

通用协议(一)

协议 协议: 协议的本质就是执行一个任务,在密码这个领域有时也称一个协议就是为了计算一个函数,即为求一个函数值,但是这任务或者说求函数值,往往不是有一方来单独计算的,而是由多个参与方合作完成的任务&…

MQTT协议

目录 MQTT协议的通信模型 MQTT消息格式* 1 固定报头 2 可变报头 3 负载 MQTT控制报文 1 CONNECT-连接服务器* 2 CONNACK-确认连接请求 3 PUBLISH-发布消息* 4 PUBACK-发布确认 5 PUBREC-发布收到 6 PUBREL-发布释放 7 PUBCOMP-发布完成 8 SUBSCRIBE-订阅主题* …

【协议_简介】

协议简介常见协议UDP协议IP协议以太网帧协议ARP协议封装分用网络通信的过程ARP协议:通过IP地址查找MAC地址 协议简介 协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这…

netty实现多协议,多编解码器

实现多协议,多编解码器详解 前言netty中handler的执行顺序和条件(重要)执行顺序入栈handler介绍出栈handler介绍入栈handler处理器顺序出栈handler处理器顺序 执行条件 编码演示客户端服务端 编解码器异常继续传递消息(扩展&#…

什么是802.1q协议

欢迎来到东用知识小课堂! 1.VLAN VLAN全称:Virtual Local Area Network(虚拟局域网),是将一个物理的LAN在逻辑上划分成多个广播域的通信技术。在数据帧的SMAC字段后添加VLAN标签字段,基于接口、IP、MAC或协…

qi无线充电协议_无线充电Qi专利池正式上线!

展位合作,请联系:infochongdiantou.com 此前,充电头网报道了Philips飞利浦将征收无线充专利费的事件,引发行业关于无线充专利费收取的广泛讨论。1月14日,关于大家关心的无线充专利授权,业界有了最新进展&am…

MQTT - 消息队列遥测传输协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在19…

无线充qi协议c语言详解,无线充电Qi协议正向通信FSK的解调设计

白光磊 池卿华 王兆俊 江昊 史佳雯 周天 摘 要: 无线充电Qi协议提出发射器和接收器通过频率调制(FSK)方式进行正向通信,进而建立完整的通信状态控制。接收器可采用测宽法进行频率解调,然而由于电磁耦合变化、负载变化、载波占空比变化、测量量化等引起的误差,该方法无法满…

无线充qi协议c语言详解,QI无线充通信协议数据包格式解析

QI通信数据格式编码: 协议规定时钟信号的频率应该是Fclk = 2(4%)KHZ,所以每一位的传输时间约500us,如图所示 数据 0:500us的高电平,或者500us的低电平 数据 1:250us高电平+250us低电平,或者250us低电平+250us高电平 电源接收端(移动设备端)采用 11 位异步串行格式传输数…

无线充电协议Qi 转 UART

前言 最近有个网友联系我,咨询做无线充电的方案; 于是开始评估一下这个方案: 1:无线充电分为供电端无线发射(通过MOS开关斩波,使线圈的电流变化,这样线圈对外才会很强的电磁辐射)受…

无线充QI协议之TX与RX通讯方式篇

谈到无线充通讯,首先得了解下无线充电的工作原理,在描述中,提供功率的一端称为发射端,接收功率的一端称为接收端; 发射端直流电经过全桥转换为交流电,交流电通过线圈产生磁场(电生磁&#xff0…

无线充电原理与QI协议详解

一 、无线充电基本原理 无线充电的基本原理就是我们平时常用的开关电源原理,区别在于没有磁介质耦合,那么我们需要利用磁共振的方式提高耦合效率,具体方法是在发送端和接收端线圈串并联电容,是发送线圈处理谐振状态,接…

Android 项目必备(二十六)-->获取手机中所有 APP

效果图 代码 添加依赖 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30 implementation androidx.recyclerview:recyclerview:1.1.0AppInfo.java import android.graphics.drawable.Drawable;/*** created on 2020/8/3 20:22** author Scarf Gong*…

基于uni-app多平台管理系统模板uniapp-admin

uniapp-admin 2.0.0 重磅发布! 更加完善的开发指南主题定制:支持颜色主题和深色模式,页面更加美观国际化/多语言:应用内容和pages.json国际化,支持N种语言引入iconfont:海量字体图标支持引入rap2接口管理平…

AppAnnie——AppStore统计工具

前言 随着iOS开发的流行,针对iOS开发涉及的方方面面,早有一些公司提供了专门的解决方案或工具。这些解决方案或工具包括:用户行为统计工具(友盟,Flurry,Google Analytics等), App Store销售分析工具&#x…

Android 启动 应用程序详情AppInfo(AppDetail) -源码分析

在Launcher (桌面)上,长按应用图标然后点击 右上角的 应用详情 按钮, 将会进入 该 应用的详情 界面。 这个过程将会涉及 Client (Launcher App) -> App API(LauncherApps ) -> Framework API(LauncherAppsService) 下面将以…

AppInfoPro 获取手机应用信息

AppInfoKtx Github Android - 获取手机安装的应用信息(用户应用、系统应用)、手机信息、屏幕信息,并且支持扫描本地符合指定要求(后缀)的应用,并且获取该apk信息,支持导出应用信息(…

关于Vista的AppInfo服务被禁的问题

昨天参考了这个文章对vista服务进行了大张旗鼓的阉割,冒险地把大部分服务都给卡擦了(不想转贴了,这个文章本身也是转贴的) http://blog.tom.com/pslwap/article/1411.html 然后就出现了郁闷的事情: 重新启动后任何需要提升权限来操作的程序都无法启动,提示"无法启动服务…

Android8.1根据app名字调用显示app的属性页(App info)

https://actionwind.wordpress.com/2022/04/14/android8-1%e6%a0%b9%e6%8d%aeapp%e5%90%8d%e5%ad%97%e8%b0%83%e7%94%a8%e6%98%be%e7%a4%baapp%e7%9a%84%e5%b1%9e%e6%80%a7%e9%a1%b5%ef%bc%88app-info%ef%bc%89/ 如果要让手机显示出app的属性页: 代码如下&#xff1…