首页 > 其他分享 >MQTT基础介绍

MQTT基础介绍

时间:2023-04-21 15:45:40浏览次数:33  
标签:基础 broker 介绍 MQTT 消息 心跳 连接 客户端

MQTT与HTTP的区别
  • HTTP协议是客户端与服务端直连请求与响应
  • MQTT是基于发布订阅模型的轻量级的消息传输协议
MQTT能力
  • 发布:Publish
  • 订阅:Subscribe
  • 代理:Broker,管理通信
  • 执行模式:客户端发送消息到broker,broker将消息发送给订阅过的客户端
MQTT通信模式
  • 一对一:点对点通信
  • 一对多:消息广播
  • 多对一:数据采集
  • MQTT 底层协议基于TCP实现
服务质量等级
  • QoS 0:消息可能丢失
  • QoS 1:消息不会丢失但可能重复
  • Qos 2:消息不会丢失也不回重复
  • 服务质量越稳定可靠性越高的同时对性能损耗越大
  • 根据实际网络情况和服务质量选择质量等级
心跳机制

KeepAlive是在TCP中一个可以检测死连接的机制,不稳定的网络环境可能会让连接进入假死状态,为了减少对上层的影响,客户端和代理都需要及时感知连接是否处于异常状态,底层tcp协议的KeepAlive感知所需时间太长,mqtt自己定义了一套KeepAlive机制,客户端需要定期发送心跳报文,用来感知异常状态进行断开

心跳是创建连接的时候,在connect报文中指定,指定时间单位是s,假设KeepAlive指定心跳时间为1分钟,当客户端连接空闲时间超过1分钟时,向broker发送心跳报文PINGREQ,broker收到心跳请求后返回心跳响应PINGRESP,如果broker超过1.5分钟时间没有收到心跳请求则断开连接,可以投递遗嘱消息到订阅方,如果客户端超过一定时间没有收到心跳响应也断开连接

  • 遗嘱消息:

    在MQTT中采用发布订阅模式,实际通信的双方不会直接进行连接,所有通信的客户端无法感知对方的在线状态,遗嘱机制就是客户端连接的时候向代理设置自己的遗嘱内容,一旦代理发现连接异常断开,就向所有订阅该遗嘱的客户端发送遗嘱消息

  • 保留消息

    发布一条消息的时候,如果订阅方不在线,就会错过这条消息,如果不想这样可以使用保留消息功能,让broker保留向主题发送的最后一条消息,当订阅端重新上线并订阅的时候,broker就会把消息发送过去,这样可以让客户端上线时就收到消息,保持更新,无需等待下次消息

  • 半开连接:

    当通信双方直接的传输因为网络或者其他原因有时会不同步,比如一方发生崩溃或者传输错误,在tcp中这种不完全连接状态称为半开连接,表象是通信的一侧继续运行,不回通知另一侧的故障,仍然连接的一方继续尝试发送消息并等待响应

  • 客户接管 Take-Over:

    客户端与broker连接异常断开,时间小于心跳断开时间,尝试重新连接broker,在未达到心跳时间的时间内,客户端与broker会有两条连接,

    针对此项mqtt重新连接并执行客户端Take-Over措施:先断开之前的连接再建立新的连接

MQTT报文

MQTT总共定义了14种报文类型,按照功能分类可以分为连接、发布、订阅、心跳四类

image-20230421152223009

  • CONNECT-客户端向代理发起连接:

    • 客户端标识符
    • 用户名
    • 密码
    • 遗嘱消息
  • PUBLISH-客户端向代理发布消息:

    • 主题
    • QoS
    • Payload
  • SUBSCRIBE-客户端向代理订阅的主题:

    • 主题
    • QOS
  • 报文格式:

    1. 固定报头-用于所有控制报文:

    2. 可变报头-部分控制报文

    3. 有效载荷-部分控制报文

标签:基础,broker,介绍,MQTT,消息,心跳,连接,客户端
From: https://www.cnblogs.com/Mickey-7/p/17340605.html

相关文章

  • java EE开发之Servlet第十一课:反射基础三
    javaEE开发之Servlet第十一课:反射基础三1.使用反射机制形成通用sql语句1)构建insert语句publicstaticvoidsave(Objectobj){ //获取传递过来对象的Class类对象 Classc=obj.getClass(); //获取数据库连接 Connectionconn=getConn(); //准备执行SQL语句的对象(车......
  • JMeter入门教程(1) --JMeter介绍
    文章目录1.任务背景2.JMeter特性1.任务背景ApacheJMeter是100%纯Java桌面应用程序,用于对软件做压力测试。它最初是为测试Web应用程序而设计的,后来扩展到其他测试领域。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证被测程序返回了期望的结果。为了保证......
  • Linux 命令基础
    Chown ---修改所属用户和组chmod[-R]xyz 文件或目录   ---修改用户的权限r=4,w=2,x=1(rwx=4+2+1=7)ls-l d是目录-是文件l是链接文档(linkfile)b是可随机存储装置c是串行端口设备文件r读  w写  x执行d  rwx  r-x......
  • BSN-DDC基础网络详解(九):跨链机制
    我们将在BSN跨链通信枢纽中陆续增加DDC网络中各个开放联盟链的跨链互操作,支持DDC/NFT在不同的链框架之间进行转移。官方DDC和平台方自定义DDC/NFT都可以通过跨链机制进行链间转移。01DDC开放联盟链之间的跨链平台方基于某一条DDC开放联盟链生成的DDC,可以转移到DDC网络内的其它DDC开......
  • 中移链合约常用开发介绍(三)工程化开发智能合约
    一、目的本文档基于中移链合约常用开发,介绍了工程化开发智能合约的方法。本文档将从自动生成项目展开,适合刚接触合约开发的开发人员入门工程化开发。二、智能合约介绍区块链作为一种分布式可信计算平台,去中心化是其最本质的特征。每笔交易的记录不可篡改地存储在区块链上。智能合约......
  • Gstreamer Pad模板介绍
    Pad模板在GStreamer中,Pad模板(PadTemplate)共有两种类型:静态Pad模板(StaticPadTemplate)和动态Pad模板(DynamicPadTemplate)。静态Pad模板是在元素的代码中预定义的,它描述了Pad的名称、方向、数据类型、标识符和其他属性。静态Pad模板用于描述元素的固有能力,因此在......
  • Jtti:Xftp有什么用?Xftp主要功能特性介绍
        Xftp有什么用?Xftp是一个用于MSWindows平台的强大的FTP和SFTP文件传输程序,允许您能安全地在Unix/Linux和WindowsPC之间传输文件。下面一起来了解下Xftp主要功能特性有哪些。Xftp是NetSarang推出的一款Windows端的FTP工具,很多人应该用过他们的SSH软件Xshell。实际上Xftp......
  • MQTT报文分析
    一、问题引入MQTT属于应用层协议,基于TCP/IP架构实现,那么它的报文是如何定义的呢?或许可以像分析http协议那样,利用抓包工具:wireshark分析报文。二、解决过程......
  • 数据对拍器简单介绍
    文章目录数据对拍举例dp暴力数据对拍总结数据对拍使用数据对拍的功能来检测代码有没有出错误。步骤:针对某个题的做题过程首先写这道题的你认为的优化做法,因为一般的算法竞赛中肯定不可能是暴力的。然后写这道题的暴力做法。然后写数据对拍器,比较数据的差异举例2.01背包问题dp对于......
  • 深度学习基础入门篇[六(1)]:模型调优:注意力机制[多头注意力、自注意力],正则化【L1、L2,D
    深度学习基础入门篇[六(1)]:模型调优:注意力机制[多头注意力、自注意力],正则化【L1、L2,Dropout,DropConnect】等1.注意力机制在深度学习领域,模型往往需要接收和处理大量的数据,然而在特定的某个时刻,往往只有少部分的某些数据是重要的,这种情况就非常适合Attention机制发光发热。举......