展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

mqtt入门(一):简介

前言

简介

  • 消息发送者先将消息发送服务器的主题,主题也可以理解为通道,消息接收者通过主题接收消息
  • 消息服务质量
QoS0 至多一次:消息发送者只发送一次消息,消息接收者没有接到也不会再发了
QoS1 至少一次:消息发送者持续不断的发送消息,消息接收者接收到了也还会再发
QoS2 只有一次:消息发送者只发送一次,且确保这一次被消息接收者接收到
  • 概念
  • 主题
消息发送者和消息订阅者会通过主题进行消息通信
例如 char/aaa/12 就是三个层级的主题
例如消息接收者通过主题 char/+/bbb 订阅消息,那么他就可以订阅到 char/aaa/bbb 或者 char/ccc/bbb 发送的消息(加号表示通配符,即任意字符串)
例如消息接收者通过主题 char/# 订阅消息,那么他就可以订阅到 char/aaa/bbb 或者 char/ccc/ddd 发送的消息 (井号表示通配符,即任意层级的字符)

带有通配符的主题只能放在消息接收者这一方
  • mqtt数据包结构
固定报文头
可变报文头
报文体
  • 固定报文头
分为2个部分,byte1和byte2
byte1包括mqtt数据包类型和类型的具体标识
byte2主要是可变报文头和报文体的长度

  • mqtt数据包类型如下

  • 不同mqtt数据包类型的具体标识如下

  • QoS

订阅者收到消息的QoS级别取决于发布消息的QoS和订阅消息的QoS




  • byte0
byte0可以为0或1,若为1则表示这条消息为保留消息
保留消息表示,如果有新的订阅者订阅该主题,那么也可以接收到最近的消息
  • 可变头
  • 协议名
  • 协议版本号
  • clean session
  • will flag
设置为1表示会存储遗言消息,设置为0则不会存储
  • will QoS
表示遗言消息的消息质量
  • will reation
遗言消息是否是一个保留消息
  • username flag 和passwor flag
表示消息负载中是否去携带用户名或密码,为1时则携带
  • 心跳时长
客户端会给服务端发送ping req表明客户端还活着,服务端会给客户端会ping resq表明服务端还活着

心跳时长表示客户端和服务端之间两次数据包间隔的最大时长
超过心跳时长时,会进行一次心跳检查,(ping req和ping resp)
当服务端在心跳时长的1.5倍时间内没有接收到客户端发送的数据包,则会认为客户端掉线了,就会主动断开客户端
当客户端一段时间内没有接收到服务端的的ping resp,则会认为服务端掉线了,同样也会主动断开连接
  • 连接确认标识
都必须设置为0,表示这是一个session present

-连接返回码

表示连接失败的原因
  • 主题名称
表示往那个主题中发布消息
  • message id
消息的标识
  • 报文体
posted @ 2022-03-19 10:40  DogLeftover  阅读(75)  评论(0编辑  收藏  举报