前言
- 該筆記學習自mqtt
- 參考1
- 參考2
簡介
- 消息發送者先将消息發送伺服器的主題,主題也可以了解為通道,消息接收者通過主題接收消息
- 消息服務品質
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
消息的辨別
- 封包體