一文读懂MQTT各参数定义(非ChatGPT生成版)
文章目录
- 前言
- 主流使用MQTT协议的云平台
- 连接参数
- 连接参数详解
- 1.服务器地址(Server Address)
- 2.端口(Port)
- 3.客户端标识符(Client Identifier)
- 4.用户名和密码(Username and Password)
- 5.清理会话标志(Clean Session Flag)
- 6.遗嘱消息(Will Message)
- 7.保持活动(Keep Alive)
- 小结
- 设备数据传输
- 1.发布者(Publisher)
- 2.订阅者(Subscriber)
- 3.主题(Topic)
- 4.订阅发布时的其它参数
- 服务质量等级(QoS)
- 保留标志(Retained Flag)
- 总结
前言
什么是MQTT,什么情况下使用MQTT
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传递协议,设计用于在各种设备之间进行可靠的、实时的、双向的通信。
MQTT 是一种灵活、轻量级、可靠的通信协议,适用于各种需要可靠消息传递的物联网和传感器网络应用。它在节约网络带宽、降低能耗、实现快速响应等方面具有重要作用。
物联网终端相较于手机和电脑拥有不需要大数据交互,需要与服务器长时间连接并时刻待机的特点。因此,通信协议需要具有在连接时最大程度地减少数据收发,以保持在线的能力。MQTT协议正是为这种特殊环境而设计的。
主流使用MQTT协议的云平台
目前哪里平台使用MQTT
目前市场上主流的服务器,95%以上的都是基于MQTT协议开发的。其中包括阿里云物联网平台、腾讯云物联网、亚马逊物联网,中移物联的ONENET。其中在上面衍生出来的产品,如阿里去的飞雁平台,腾讯连连等产品,本质就是在MQTT的方式上增加了配网交互以及对应APP与设备的绑定关系,或者是数据库存分析等功能,万变不离其中。
连接参数
MQTT连接主要参数
- 服务器地址(Server Address)
- 端口(Port)
- 客户端标识符(Client Identifier)
- 用户名和密码(Username and Password)
- 清理会话标志(Clean Session Flag)
- 遗嘱消息(Will Message)
- 保持活动(Keep Alive)
连接参数详解
各个参数的详细解读
1.服务器地址(Server Address)
指定要连接的 MQTT 服务器的主机名或 IP 地址。各平台对应的服务器主机名一般是以域名方式出现,并通过二级三级四级域名的衍生来指向你最近的服务器IP地址。
如阿里云物联网平台,你对应创建的ProductKey为a1gQZGKSSHz,则域名为:
a1gQZGKSSHz.iot-as-mqtt.cn-shanghai.aliyuncs.com
主域名:aliyuncs.com
二级域名:cn-shanghai,表示华东2上海的服务器
三级域名:iot-as-mqtt,表示物联网平台
四级域名:a1gQZGKSSHz,指向物联网平台创建的产品类别
单一应用中设备的服务器地址一定是唯一的。
2.端口(Port)
指定 MQTT 服务器监听的端口号。由于MQTT服务器是基于TCP协议上开发的,所以默认情况下,MQTT 使用的是 TCP 端口1883。而 MQTT通过TLS加密传输时使用的是 TCP 端口8883。
使用SSL连接方式,可以使MQTT的数据传输更加的安全,但同时也增加了设备内存和存储的消耗。
3.客户端标识符(Client Identifier)
客户端标识符(Client Identifier):用于识别连接到 MQTT 服务器的客户端。每个客户端在连接一个目标服务器里都必须具有唯一的标识符,以便服务器可以区分它们。
客户端标识符在同一个服务器中,如同公民的身份证一样,必须是唯一的。如果两台设备都使用相同的客户端标识符,则会造成之后上线的设备连接服务器后,服务器将主动断开前一台设备的连接。
4.用户名和密码(Username and Password)
某些 MQTT 服务器可能需要验证用户身份。如果需要身份验证,则需要提供有效的用户名和密码。如阿里云物联网平台,则是通过三元素的加密计算得出的用户名和密码。
用户名和密码对于设备来说一定是唯一的,如果一台设备带着用户名和密码连接一个没有加密的MQTT服务器,通常情况下是可以连接成功的。
5.清理会话标志(Clean Session Flag)
清理会话标志(Clean Session Flag):当建立 MQTT 连接时,可以设置该标志来指示服务器如何处理之前的会话状态。如果设置了“清理会话”标志,服务器将删除之前保存的该客户端的订阅、QoS 消息等信息。
当未设置清除会话标志,设备连接上MQTT服务器时,服务器将会把之前订阅号上未发送成功的数据发送给设备,这也是可以实现用户离线接收到发送数据的方式。
6.遗嘱消息(Will Message)
遗嘱消息(Will Message):可以设置一个遗嘱消息,以便在客户端异常断开连接后,自动向服务器发送一条消息。遗嘱消息可以包含任何有效的 MQTT 消息,可以用于通知其他客户端或进行清理操作。
遗嘱消息由遗嘱主题和遗嘱消息内容两部分组成。如果其它的设备端定于此设备的遗嘱主题时,该设备掉线后,则MQTT服务器将会向其它订阅遗嘱主题的设备发送遗嘱消息内容。但是很可惜,目前很多物联网平台是不支持遗嘱消息功能的,如阿里云物联网平台,腾讯云物联网等。
7.保持活动(Keep Alive)
指定客户端与服务器之间的心跳间隔时间(以秒为单位)。客户端会定期向服务器发送心跳包以保持连接的活跃状态。这里需要注意的是,则Keep Alive设置成0时,服务器将不再判断设备的心跳包。
Keep Alive的时间一般为30秒至7200秒之间,由设备端在连接服务器时将Keep Alive参数通知服务器。而设备应该在每次Keep Alive时间到来前,发送一个心跳包至服务器,以通知服务器设备连接的正常。当服务器在Keep Alive时间的1.5倍以上时间未收到设备心跳包时,则认为设备已经掉线了。此时服务器将会向设备设置的遗嘱消息主题发送遗嘱消息内容。
例如:
设备通知MQTT服务器KeepAlive的时间值为60秒,则设备必须在90秒内向服务器发送心跳包或者进行一次数据通信,否则服务器认为设备掉线。并关闭对应的MQTT TCP连接信息。
小结
通过以上7个参数的正确设置,就可以将设备连接到MQTT的服务器。
设备数据传输
MQTT服务器中设备间通信方式
在 MQTT 中,发布者(Publisher)和订阅者(Subscriber)通过使用主题(Topic)来进行消息的发布和订阅。
1.发布者(Publisher)
发布者是产生消息并将其发送到 MQTT 服务器的应用程序或设备。发布者将消息发布到一个或多个主题上。主题是消息的命名空间,用于标识消息的不同类型或分类。发布者可以选择性地选择一个或多个主题来发布消息。
2.订阅者(Subscriber)
订阅者是通过 MQTT 客户端订阅一个或多个主题的应用程序或设备。订阅者接收并处理订阅的主题上发布的消息。订阅者可以选择性地订阅一个或多个感兴趣的主题。
3.主题(Topic)
主题是 MQTT 中用于消息过滤和路由的重要概念。发布者在发布消息时将其关联到一个或多个主题上,订阅者可以通过订阅相应的主题来接收与之关联的消息。主题是通过由层级结构的多个标识符组成的字符串来表示,通常使用斜杠(/)进行分隔。例如,“home/living-room/temperature” 是一个示例主题。
我们以博客这种通俗易懂的方式来解读,则发送者就是博客编写内容的人,而订阅者就是阅读博客内容的人。当撰写者在csdn的物联网专栏下写了一条文件名为《一文读懂MQTT各参数定义》时,则发布者的发布主题就是:/www.csdn.net/物联网专栏/《一文读懂MQTT各参数定义》,消息内容则为文章内容。而订阅者只要订阅了主题:/www.csdn.net/物联网专栏/《一文读懂MQTT各参数定义》就能看到文章的内容。当然,订阅者也可以在www.csdn.net或者在物联网专栏中都可以找到文章,这就是主题中组的概念。
4.订阅发布时的其它参数
服务质量等级(QoS)
MQTT定义了三个服务质量等级,分别是0、1和2,其具体含义为:
- QoS0:最多发一次,不保证可靠性;
- QoS1:至少发一次,确保消息至少被接收一次,但可能会重复接收;
- QoS2:只发一次,确保消息被接收且仅被接收一次。
保留标志(Retained Flag)
当发布一个新的主题时,可以设置该主题的保留标志为true或false来指示是否需要将该主题保留。如果保留标志为true,则该主题的最新消息将会一直被保留下来,直到新的消息发布到该主题上。
总结
通过指定这些参数,MQTT消息发送者可以控制消息发布的范围和可靠性,并确保消息的正确传递和可订阅性。
相关文章:
一文读懂MQTT各参数定义(非ChatGPT生成版)
文章目录 前言主流使用MQTT协议的云平台连接参数连接参数详解1.服务器地址(Server Address)2.端口(Port)3.客户端标识符(Client Identifier)4.用户名和密码(Username and Password)5…...
redis-lua脚本-无参-比较2个数值
以下是演变的过程: eval " return haha " 0 eval " local res haha; return res; " 0 eval " local value1 redis.call(get,value1); local value2 redis.call(get,value2);return value1; " 0 eval " return 1 < 2;…...

Lesson5-1:OpenCV视频操作---视频读写
学习目标 掌握读取视频文件,显示视频,保存视频文件的方法 1 从文件中读取视频并播放 在OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件: 创建读取视频的对象 cap cv.VideoCapt…...

Lesson5-2:OpenCV视频操作---视频追踪
学习目标 理解meanshift的原理知道camshift算法能够使用meanshift和Camshift进行目标追踪 1.meanshift 1.1原理 m e a n s h i f t meanshift meanshift算法的原理很简单。假设你有一堆点集,还有一个小的窗口,这个窗口可能是圆形的,现在你可…...

1778_树莓派系统安装
全部学习汇总: GitHub - GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. 一段视频学习教程的总结,对我来说基本上用处不大。因为我自己的树莓派简简单单安装完就开机成功了,而且实现了很多视频中介绍的功能。 …...

关闭jenkins插件提醒信息
jenkins提醒信息和安全警告可以帮助我们了解插件或者jenkins的更新情况,但是有些插件是已经不维护了,提醒却一直存在,看着糟心,就像下面的提示 1、关闭插件提醒 找到如下位置:系统管理-系统配置-管理监控配置 打开管…...

JixiPix Artista Impresso Pro for mac(油画滤镜效果软件)
JixiPix Artista Impresso pro Mac是一款专业的图像编辑软件,专为Mac用户设计。它提供了各种高质量的图像编辑工具,可以帮助您创建令人惊叹的图像。该软件具有直观的用户界面,使您可以轻松地浏览和使用各种工具。 它还支持多种文件格式&…...

机器学习之 Jupyter Notebook 使用
🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…...

Unity引擎修改模型顶点色的工具
大家好,我是阿赵。 之前分享过怎样通过MaxScript在3DsMax里面修改模型的顶点色。不过由于很多时候顶点色的编辑需要根据在游戏引擎里面的实际情况和shader的情况来动态调整,所以如果能在引擎里面直接修改模型的顶点色,将会方便很多。于是…...

linux安装minio以及springboot整合使用
文章目录 1.linux安装minio2.springboot整合minio使用 1.linux安装minio 1.新建文件夹 mkdir /home/minio # 数据文件夹 mkdir /home/minio/data # 创建日志文件夹 mkdir /home/minio/log2.进入文件夹 cd /home/minio3.下载minio,链接可从官网获取 wget https://…...
javaee 事务 事务的特性 事务的并发问题 事务的隔离级别
什么是事务(Transaction) 是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,sql 能将逻辑相关的一组操作绑定在一起,以便服务器 保持数据的完整性。事务…...

Matlab怎么引入外部的latex包?Matlab怎么使用特殊字符?
Matlab怎么引入外部的latex包?Matlab怎么使用特殊字符? Matlab怎么使用特殊字符?一种是使用latex方式,Matlab支持基本的Latex字符【这里】,但一些字符需要依赖外部的包,例如“𝔼”,需…...

day-07 I/O复用(select)
一.I/O复用 (一)基于I/O复用的服务器端 1.多进程服务器 每次服务都需要创建一个进程,需要大量的运算和内存空间 2.复用 只需创建一个进程。 3.复用技术在服务器端的应用 (二)select函数实现服务器端 (…...

Glide的使用及源码分析
前言 依赖 implementation com.github.bumptech.glide:glide:4.16.0 github: GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling 基本使用 //加载url Glide.with(this) .load(url) .placeholder(R.drawable.placehol…...

外贸爬虫系统
全球智能搜索 全球智能搜索 支持全球所有国家搜索引擎,及社交平台,精准定位优质的外贸客户,免翻墙 全球任意国家地区实时采集 搜索引擎全网邮箱电话采集 社交平台一键查看采集(Facebook,Twitter,Linkedin等) 职位…...

CentOS 8 安装 Code Igniter 4
在安装好LNMP运行环境基础上,将codeigniter4文件夹移动到/var/nginx/html根目录下,浏览器地址栏输入IP/codeigniter/pulbic 一直提示: Cache unable to write to "/var/nginx/html/codeigniter/writable/cache/". 找了好久&…...
.net framework 提示安装了 但是删除面板看不到
如果你在计算机上安装了.NET Framework,但在“控制面板”中找不到.NET Framework的相关条目,可能是因为.NET Framework的某些组件或特定版本未在“程序和功能”(或旧版本的Windows中称为“程序和功能”)列表中列出。这可能是正常情…...
flask-smorest 库
flask-smorest 简介 flask-smorest: 基于Flask/Marshmallow的REST API框架 flask-smorest 是一个用于创建于数据库无关的REST API的架库。 它使用Flask作为Web服务器,并使用marsmallow对数据进行序列化和反序列化。(类似于drf) 快速入门 flask-smorest对代码应…...
android WindowManager的简单使用
<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><uses-permission android:name"android.permis…...
Spark_Spark比mapreduce快的原因
Spark 为什么比 mapreduce 快? 最重要的3点, 数据缓存 : 中间结果可以缓存在内存中复用 资源管理 :executor task 管理,不同stage的task可以运行在同一个executor上 任务调度 : dag 对比多阶段mr 1.任务模型的优化(DAG图对比…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
数据库——redis
一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...

Xcode 16 集成 cocoapods 报错
基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...