前言
简介
- 消息发送者先将消息发送服务器的主题,主题也可以理解为通道,消息接收者通过主题接收消息

- 消息服务质量
| QoS0 至多一次:消息发送者只发送一次消息,消息接收者没有接到也不会再发了 |
| QoS1 至少一次:消息发送者持续不断的发送消息,消息接收者接收到了也还会再发 |
| QoS2 只有一次:消息发送者只发送一次,且确保这一次被消息接收者接收到 |
- 概念

- 主题
| 消息发送者和消息订阅者会通过主题进行消息通信 |
| 例如 char/aaa/12 就是三个层级的主题 |
| 例如消息接收者通过主题 char/+/bbb 订阅消息,那么他就可以订阅到 char/aaa/bbb 或者 char/ccc/bbb 发送的消息(加号表示通配符,即任意字符串) |
| 例如消息接收者通过主题 char/# 订阅消息,那么他就可以订阅到 char/aaa/bbb 或者 char/ccc/ddd 发送的消息 (井号表示通配符,即任意层级的字符) |
| |
| 带有通配符的主题只能放在消息接收者这一方 |
| 分为2个部分,byte1和byte2 |
| byte1包括mqtt数据包类型和类型的具体标识 |
| byte2主要是可变报文头和报文体的长度 |
| |

-
mqtt数据包类型如下

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

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




| byte0可以为0或1,若为1则表示这条消息为保留消息 |
| 保留消息表示,如果有新的订阅者订阅该主题,那么也可以接收到最近的消息 |
- 可变头

- 协议名

- 协议版本号

- clean session

- will flag
- username flag 和passwor flag
| 表示消息负载中是否去携带用户名或密码,为1时则携带 |
| 客户端会给服务端发送ping req表明客户端还活着,服务端会给客户端会ping resq表明服务端还活着 |
| |
| 心跳时长表示客户端和服务端之间两次数据包间隔的最大时长 |
| 超过心跳时长时,会进行一次心跳检查,(ping req和ping resp) |
| 当服务端在心跳时长的1.5倍时间内没有接收到客户端发送的数据包,则会认为客户端掉线了,就会主动断开客户端 |
| 当客户端一段时间内没有接收到服务端的的ping resp,则会认为服务端掉线了,同样也会主动断开连接 |
| 都必须设置为0,表示这是一个session present |
-连接返回码
- 报文体

· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术