MQTT的会话及练习

服务端的会话状态

1. 客户端订阅的消息
2. 已发送,但还未完成确认的QoS 1和QoS 2消息
3. 等待发送的QoS 0,QoS 1,QoS 2消息
4. 从客户端收到的,还没有完成确认的QoS 2消息
5. 遗嘱消息和遗嘱延迟间隔
6. 会话是否存在

客户端的会话状态

1. 已发送但未完成确认
如何选择会话的生命周期

需要持久会话

1. 不希望错过离线期间的消息
2. 不希望QoS 1和QoS 2消息丢失
3. 不希望每次连接都需要重新建立订阅
4. 设备定期休眠,不希望长时间维护连接

不需要持久会话

1. 只对外发布QoS 0消息,不会接受任何消息
2. 只订阅QoS 0消息,不关心离线期间的消息

会话相关字段

Clean Start = 0
尝试从已存在的会话中恢复通信Clean Start = 1
丢弃任何已存在的会话并创建新会话Session Expiry Interval
执行会话在连接断开后能够保留的最长时间Session Expiry Interval = 0
会话将在网络连接断开时结束Session Expiry Interval > 0
会话将在连接断开的多少秒后过期Session Expiry Interval = 0XFFFFFFFF
会话永不过期
会话练习
场景1:在会话过期前重新连接可以不用再次订阅
STEP 1: [订阅端]Clean Start=1,Session Expiry Interval= 300,创建一个全新的持久会话。STEP 2: [订阅端]订阅主题 aSTEP 3: [订阅端]断开连接,将 Clean Start 设置为0,然后重连STEP 4: [发布端]新建一个连接向主题a发布消息现象:订阅端可以收到消息

与非持久会话对比:

STEP 1:[订阅端]Clean Start=1,Session Expiry lnterval= 0,使用全新的会话创建连接STEP 2:[订阅端]订阅主题 aSTEP 3:[订阅端]断开连接,将 Clean Start 设置为 0,Session Expiry Interval保持不变然后重连STEP 4:[发布端]接向主题a发布消息现象:订阅端无法收到消息,必须重新订阅
场景2:离线期间,会话可以为客户端缓存新到达的 QoS (可选)、QoS1和QoS2消息
STEP 1:[订阅端] Clean Start= 1,Session Expiry lnterval= 300,创建一个全新的持久会话。STEP2:[订阅端]订阅主题a,然后断开连接STEP 3:[发布端]主题a发布消息 1,2,3STEP 4:[订阅端]Clean Start 设置为 0,Session Expiry lnterval 保持不变,然后重连现象:发现按顺序收到之前发布的消息

对比创建全新的会话:

STEP 4:[订阅端]Clean Start 设置为 1,Session Expiry lnterval 保持不变,然后重连现象:我们将不会收到之前发布的消息

与非持久会话对比:

STEP 1:[订阅端]Clean Start = 1,Session Expiry lnterval= 0,使用全新的会话创建连接STEP2:[订阅端]订阅主题a,然后断开连接STEP 3:[发布端]向主题a 发布消息 1,2,3STEP4:[订阅端]Clean Start 设置为0(这是为了尝试复用会话,但代理中已经没有对应的会话了,所以会创建一个全新的会话),Session Expiry lnterval 保持不变然后重连现象:我们将不会接收之前按发布的消息
场景3: 与MQTT3.1.1的区别
STEP 1: [订阅端] Clean Session =0,建立连接,订阅主题a,断开连接STEP 2: [发布端]向主题a发布两条消息STEP 3: [订阅端]保持 Clean Session = 0,重连,收到消息。STEP 4: [订阅端]断开连接,发布端发布两条消息STEP 5: [订阅端] Clean Session =1重连,代理将创建全新的会话,所以订阅端不会收到消息STEP 6: [订阅端]断开连接STEP 7: [发布端]发布两条消息。即便订阅端 Clean Session =0重连,仍然不会收到消息

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

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

相关文章

LeetCode [中等]岛屿数量

200. 岛屿数量 - 力扣(LeetCode) 找到值为1的节点之后递归调用DFS遍历,并使用与地图数据结构相同的二维数组visited来保存该点是否访问过 深度优先遍历 public class Solution {static int[][] dirs {new int[]{-1, 0}, new int[]{1, 0},…

【Linux | 编程实践】防火墙 (网络无法访问)解决方案 Vim常用快捷键命令

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

android开发的app选择图片后闪退

在Android开发过程中,可能会遇到选择图片后应用程序崩溃的情况。这种情况可能会使开发者非常困惑并且浪费很多时间。但是,如果你了解这种崩溃的原因,你就可以快速的解决它。本文将详细介绍为什么会出现选择图片后应用程序崩溃的情况。 在And…

LeetCode | 226. 翻转二叉树

LeetCode | 226. 翻转二叉树 OJ链接 不为空就翻转,空空就停止翻转左子树的节点给了右子树右子树的节点给了左就完成了翻转 struct TreeNode* invertTree(struct TreeNode* root) {//不为空就进行翻转if(root){//翻转struct TreeNode* tmp root->left;root->…

计算机网络安全问题分析与防护措施研究

计算机网络安全问题分析与防护措施研究 【摘要】在信息技术快速发展的今天,网络对于人类的生活方式影响显著增强,网络技术快速地在社会各个领域普及,使得计算机网络的安全成为一个亟待解决的问题。如何能够保证网络的快速健康发展己成为研究…

数据库之 redis

前言: 就学习爬虫而言,对于三种常见的数据库做个基本了解足以,所以笔记都是浅尝辄止,不会涉及太深入的东西。 redis简介 Redis(Remote Dictionary Server ,远程字典服务) 是一个使用ANSI C编写…

❀My学习Linux命令小记录(12)❀

目录 ❀My学习Linux命令小记录(12)❀ 46.arp指令 47.tcpdump指令 48.chmod指令 49.chown指令 50.bash调用脚本指令 shell介绍 shell脚本的组成部分 脚本执行方式 检查脚本语法 bash之变量 变量的种类:根据生效的范围不同来区分 …

GO基础之基本数据类型

基本数据类型 整型 整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64 其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应…

简单可行的SeruatV4的安装方案

目前Seurat的版本从V4升级到了V5,由于一些变化,导致当年取巧,使用获取数据的方法都无法在V5中使用。 建议在操作前重启下Rstudio(或更确切的说是R)!!! 那么如何确保自己能够安装V4的…

活动回顾|德州仪器嵌入式技术创新发展研讨会(上海站)成功举办,信驰达科技携手TI推动技术创新

2023年11月28日,德州仪器(TI)嵌入式技术创新发展研讨会在上海顺利举办。作为TI中国第三方IDH,深圳市信驰达科技有限公司受邀参加,并设置展位,展出CC2340系列低功耗蓝牙模块及TPMS、蓝牙数字钥匙解决方案,与众多业内伙伴…

Vue框架学习笔记——列表渲染:v-for

文章目录 前文提要代码正文 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 主要学习链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 代码正文 <body><div id"box"><ul><li v-for"(p,index)…

Synchronized关键字的底层原理

Synchronized实现 Synchronized创建的时候一个互斥的对象锁&#xff0c;每次只有一个线程可以获取该锁。 其底层主要是基于Monitor实现的&#xff0c;在对象的对象头中存储了MarkWord存储的就是Monitor的地址。 对象的内存结构 对象在内存中存储主要分为三个部分&#xff1a…

聊一聊大模型 | 京东云技术团队

事情还得从ChatGPT说起。 2022年12月OpenAI发布了自然语言生成模型ChatGPT&#xff0c;一个可以基于用户输入文本自动生成回答的人工智能体。它有着赶超人类的自然对话程度以及逆天的学识。一时间引爆了整个人工智能界&#xff0c;各大巨头也纷纷跟进发布了自家的大模型&#…

Siamese网络与匈牙利算法在目标跟踪中的研究与应用

1. 引言 目标跟踪是计算机视觉领域中的一个重要研究方向&#xff0c;广泛应用于视频监控、智能交通、人机交互等领域。随着深度学习技术的不断发展&#xff0c;Siamese网络和匈牙利算法在目标跟踪领域的应用逐渐受到关注。本文将对Siamese网络与匈牙利算法以及其在目标…

电动车刷卡-CI522方案

Ci522是一颗工作在13.56MHz频率下的非接触式读写芯片&#xff0c;支持读A卡&#xff08;CI523支持读A/B卡&#xff09;&#xff0c;可做智能门锁、电动车NFC一键启动、玩具NFC开锁等应用。为部分要求低成本&#xff0c;PCB小体积的产品提供了可靠的选择。 Ci522与Si522/MFRC52…

IDEA插件MybatisLog Free失效,不打印日志解决

因为此插件是基于mybatis的本地日志打印基础上操作的,所以检查是否配置日志输出版本. 如果使用的是mybatis-plus框架检查是否有下面语句 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 如果使用的是mybatis框架检查是否有下面语…

巧用JAVA自带的API解决日期类问题

文章目录 题目代码优势 题目 特殊日期 代码 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 import java.time.LocalDate; public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入您的代…

Python更改YOLOv5、v7、v8,实现调用val.py或者test.py后生成pr.csv,然后再整合绘制到一张图上(使用matplotlib绘制)

1. 前提 效果图 不错的链接&#xff1a;YOLOV7训练模型分析 关于map的绘图、loss绘图&#xff0c;可参考&#xff1a;根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图 v5、v8调用val.py&#xff0c;v7调用test.py&#xff08;作用都是一样的&#xff0c;都是…

基于Linux的网络防火墙设计方法

摘要 随着Internet的迅速发展&#xff0c;网络越来越成为了人们日常生活不可或缺的一部分&#xff0c;而随之引出的网络安全问题也越来越突出&#xff0c;成为人们不得不关注的问题。 为了在一个不安全的网际环境中构造出一个相对安全的环境&#xff0c;保证子网环境下的计算机…

javaScript-正则表达式

正则表达式 正则表达式&#xff08;Regular Expression&#xff09;是一种描述字符串规律的表达式&#xff0c;可以迅速地用极简单的方式达到字符串的校验控制。 作用&#xff1a;利用较简短的描述语法完成诸如查找、匹配、替换等功能 如何创建正则表达式: 方法1 直接声明…