当前位置: 首页 > news >正文

一文读懂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个数值

以下是演变的过程&#xff1a; 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视频操作---视频读写

学习目标 掌握读取视频文件&#xff0c;显示视频&#xff0c;保存视频文件的方法 1 从文件中读取视频并播放 在OpenCV中我们要获取一个视频&#xff0c;需要创建一个VideoCapture对象&#xff0c;指定你要读取的视频文件&#xff1a; 创建读取视频的对象 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算法的原理很简单。假设你有一堆点集&#xff0c;还有一个小的窗口&#xff0c;这个窗口可能是圆形的&#xff0c;现在你可…...

1778_树莓派系统安装

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

关闭jenkins插件提醒信息

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

JixiPix Artista Impresso Pro for mac(油画滤镜效果软件)

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

机器学习之 Jupyter Notebook 使用

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…...

Unity引擎修改模型顶点色的工具

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

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&#xff0c;链接可从官网获取 wget https://…...

javaee 事务 事务的特性 事务的并发问题 事务的隔离级别

什么是事务(Transaction) 是并发控制的单元&#xff0c;是用户定义的一个操作序列。这些操作要么都做&#xff0c;要么都不做&#xff0c;是一个不可分割的工作单位。通过事务&#xff0c;sql 能将逻辑相关的一组操作绑定在一起&#xff0c;以便服务器 保持数据的完整性。事务…...

Matlab怎么引入外部的latex包?Matlab怎么使用特殊字符?

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

day-07 I/O复用(select)

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

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…...

外贸爬虫系统

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

CentOS 8 安装 Code Igniter 4

在安装好LNMP运行环境基础上&#xff0c;将codeigniter4文件夹移动到/var/nginx/html根目录下&#xff0c;浏览器地址栏输入IP/codeigniter/pulbic 一直提示&#xff1a; Cache unable to write to "/var/nginx/html/codeigniter/writable/cache/". 找了好久&…...

.net framework 提示安装了 但是删除面板看不到

如果你在计算机上安装了.NET Framework&#xff0c;但在“控制面板”中找不到.NET Framework的相关条目&#xff0c;可能是因为.NET Framework的某些组件或特定版本未在“程序和功能”&#xff08;或旧版本的Windows中称为“程序和功能”&#xff09;列表中列出。这可能是正常情…...

flask-smorest 库

flask-smorest 简介 flask-smorest: 基于Flask/Marshmallow的REST API框架 flask-smorest 是一个用于创建于数据库无关的REST API的架库。 它使用Flask作为Web服务器&#xff0c;并使用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点&#xff0c; 数据缓存 : 中间结果可以缓存在内存中复用 资源管理 &#xff1a;executor task 管理&#xff0c;不同stage的task可以运行在同一个executor上 任务调度 : dag 对比多阶段mr 1.任务模型的优化&#xff08;DAG图对比…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...