一文读懂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消息发送者可以控制消息发布的范围和可靠性,并确保消息的正确传递和可订阅性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/65027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[音视频] SDL 渲染

调用的 API SDL_INIT # 初始化 SDL 库 SDL_CreateWIndow # 创建窗口 SDL_CreateRenderer # 创建渲染器 需要指定渲染窗口 SDL_CreateTexture # 需要指定纹理的上下文 和 数据修改频率 SDL_UpdateTexuture # 把 cpu 数据拷贝到 gpu 纹理中 SDL_RenderClear # 清空窗口纹理 SDL_…

Python 新版本有75个内置函数,你不会不知道吧

目录 Python 内置函数 前言 属性分类 模块 module 29. format() 35. help() 对象 object 17. copyright() 18. credits() 26. exit() 44. license() 59. quit() 类 class 08. bool() 10. bytearray() 11. bytes() 14. classmethod() 16. complex() 20. dict…

记一次postgres导致cpu100%

周末想打两把训练赛,没想到朋友发来一个截图 我:嗯??wtf 于是我上服务器看了一下日志,诶我超,还真的 查看进程详情 [rootiZ7xv7q4im4c48qen2do2bZ project]# pstree -tp postgres memory(904475)─┬─…

【Spring面试题】IOC控制反转和DI依赖注入(详解)

IOC Inversion of Control 控制反转,是一种面向对象的思想。 控制反转就是把创建和管理 bean 的过程转移给了第三方。而这个第三方,就是 Spring IoC Container,对于 IoC 来说,最重要的就是容器。 通俗点讲,因为项目…

SASS的@规则

1,import sass扩展了import导入,对于css,import导入在页面加载的时候去下载导入的外部文件,而sass的导入,在编译成css文件的时候就将外部的sass文件导入合并编译成一个css文件。 他支持同时导入多个文件;…

Xubuntu16.04系统中解决无法识别exFAT格式的U盘

问题描述 将exFAT格式的U盘插入到Xubuntu16.04系统中,发现系统可以识别到此U盘,但是打不开,查询后发现需要安装exfat-utils库才行。 解决方案: 1.设备有网络的情况下 apt-get install exfat-utils直接安装exfat-utils库即可 2.设备…

ZigBee案例笔记 -- RFID卡片读写(模拟饭卡)

RFID模拟饭卡应用 RFID(射频识别技术)RFID通讯协议RFID发展历史RFID操作流程说明RFID卡片读写流程RFID寻卡RFID防碰撞RFID选卡RFID卡密验证RFID读卡RFID写卡读写数据流程 RFID饭卡模拟案例驱动代码串口协议饭卡操作案例结果优化建议 RFID(射频…

C语言入门 Day_12 一维数组

目录 前言 1.创建一维数组 2.使用一维数组 3.易错点 4.思维导图 前言 存储一个数据的时候我们可以使用变量, 比如这里我们定义一个记录语文考试分数的变量chinese_score,并给它赋值一个浮点数(float)。 float chinese_scoe…

详细介绍如何基于ESP32实现低功耗的电子纸天气显示器--附完整源码

实现界面展示 这是一款天气显示器,由支持 wifi 的 ESP32 微控制器和 7.5 英寸电子纸(又名电子墨水)显示器供电。当前和预测的天气数据是从 OpenWeatherMap API 获取的。传感器为显示屏提供准确的室内温度和湿度。 该项目在睡眠时消耗约 14μA,在约 10 秒的清醒期…

GitHub打不开解决方法——授人以渔

打不开GitHub的原因之一,DNS地址解析到了无法访问的ip。(为什么无法访问?) 1、打开GitHub看是哪个域名无法访问,F12一下 2、DNS解析看对应的域名目前哪个IP可以访问 DNS解析的网址: (1&#x…

阿里云日志服务Logstore与MySQL数据库关联

前提条件 已采集日志到日志服务。更多信息,请参见数据采集。已为日志字段创建索引。更多信息,请参见创建索引。已有可用的MySQL数据库。更多信息,请参见创建数据库和账号。 操作步骤 1、在MySQL数据库中,创建用户属性表&#xf…

上海的正西边有哪些城市

背景 上海一路向西,来一趟拉萨之行,那么上海出现,所经过的那么多城市,哪些是在上海的正西边呢? 画一幅地图 基于这个背景需求,我们需要拿来一幅地图,一看便知。下面的python代码生成了一幅地…

临时抱佛脚

马上就要面试了,心里面比较紧张~ 交换型数据结构 在进行网络消息处理的时候,经常会对发送过来的消息进行读写操作。采用普通的方法,需要将读到消息频繁的进行copy操作,这样无疑会降低系统的效率。交换型数据机构指的…

Ubuntu升级Cmake、gcc、g++

背景 最近要安装llvm,我选择的是从源码安装,所以要使用Cmake进行构建项目。但是服务器上的Cmake、gcc、g的版本都太低了,不符合要求,所以要对此进行升级。在本博客中采用的升级方法不一定是最好的方法(因为我也是参考…

跨数据中心Multi-Fabric解决方案:L2和L3网络的高效连接和扩展

云数据中心里,为什么需要DCI互通? 云化数据中心,网络资源通过虚拟化技术形成资源池,实现业务与物理网络解耦,通过网络虚拟化,物理网络资源可以被分成多个虚拟网络资源,从而提高网络资源的使用效…

操作系统的发展和分类

注意:每个阶段的主要优点都是解决了上个阶段的缺点 1.手工操作阶段 概括:一个用户在一段时间内独占全机,导致资源利用率极低,用户输入指令给机器,然后机器运行响应给用户。 2.批处理阶段 2.1单道批处理系统 优点&…

LLM学习《Prompt Engineering for Developer》

Prompt 如何构造好的Prompt 分割符&#xff1a;分隔符就像是 Prompt 中的墙&#xff0c;将不同的指令、上下文、输入隔开&#xff0c;避免意外的混淆。你可以选择用 &#xff0c;“”"&#xff0c;< >&#xff0c; &#xff0c;: 等做分隔符&#xff0c;只要能明确…

【LeetCode】85.最大矩形

题目 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 示例 1&#xff1a; 输入&#xff1a;matrix [["1","0","1","0","0"],["1&quo…

django后台启动CORS跨越配置

文章目录 背景什么是跨域问题&#xff1f;跨域问题的解决方案 Django 解决跨域问题 背景 什么是跨域问题&#xff1f; 跨域问题是指浏览器的同源策略限制了来自不同域的 AJAX 请求。 具体来说: 同源策略要求源相同才能正常进行 AJAX 通信。判断是否同源需要满足三个条件: 协…

图解 STP

网络环路 现在我们的生活已经离不开网络&#xff0c;如果我家断网&#xff0c;我会抱怨这什么破网络&#xff0c;影响到我刷抖音、打游戏&#xff1b;如果公司断网&#xff0c;那老板估计会骂娘&#xff0c;因为会影响到公司正常运转&#xff0c;直接造成经济损失。网络通信中&…