【ESP32-IDF】05-4 WIFI-MQTT协议基础

mqtt协议基础

声明
该部分是参考的太极创客的内容完成的,感觉他们的视频和教程非常好,本文仅仅是笔记,可以去听原版的

1. mqtt的组成

在这里插入图片描述

mqtt是一个客户端服务端架构的发布订阅模式的消息传输协议

1.1 客户端

  客户端可以完成发送数据,也可以完成接收数据的功能

1.2 服务端

  是个中转站,能够判断要把数据转发到哪些客户端。

  可以对客户端发送来的数据进行必要的保存,为了提升mqtt传输的稳定性

  能够把客户端信息进行分发

1.3 mqtt主题

  mqtt服务器怎么知道要把数据发送给哪些客户端呢?

  这个时候就要提到主题的概念了,发送来的数据会被加上一个标签,就是主题。客户端会告诉服务器自己需要哪些主题的数据,因此服务器就能够根据客户端的请求,转发数据了。只有订阅了主题的客户端,才能够接收到数据。

1.4 多重身份

在这里插入图片描述

  每个客户端都可以发布或者订阅消息。每个客户端可以有不同的身份。

1.5 mqtt协议的特性

  • 相互独立: mqtt客户端是一个个独立的个体,他们不需要了解彼此的存在,依然能够实现信息交流。
  • 空间可分离: 只要客户端联网就能够交流
  • 时间可异步:如果客户端和服务器之间连接发生了断开,服务器不能马上把信息发送给客户端,服务器可以等到客户端重新连接网络的时候再发送,因此允许时间的异步。

2. 连接和断开mqtt服务器

2.1 客户端向服务器发送请求

  • 客户端向服务器发送connect数据包

在这里插入图片描述

  • clientId :客户端的名字
  • cleanSession:客户端受到服务端数据以后需不需要返回确认,比较重要的信息发送需要设置为fasle,需要返回信息,并且服务端会保存这个信息。同时,重要的客户端除了这个选项以外,还要设置Qos>0
  • username
  • password
  • lastwillTopic
  • lashWillQos
  • lastWillMessage
  • lastWillRetain
  • keepAlive: 心跳时间间隔。要求每个客户端定时给服务端发送心跳信息,表示客户端还在线。

2.2 服务端向客户端发送确认

  • 服务端向客户端回复connack数据包

在这里插入图片描述

  • sessionPresent:当前会话,表示上一次客户端跟服务端交互的过程中,客户端是否有消息没有确认(cleansession=false的时候)
  • returnCode: 连接返回码,能够表示服务端的状态

在这里插入图片描述

2.3 客户端与服务端断开连接

  客户端会向服务端发送disconnect数据包

3. 测试环境搭建

共用mqtt服务器列表

   使用mqttfx软件,可以实现mqtt测试的功能,这里我们使用公用的物联网服务器进行学习。

4. 发布订阅和取消订阅

4.1 发布信息

在这里插入图片描述

   publish报文

在这里插入图片描述

  • packetId: 数据包id,便于服务端管理
  • topicName :主题名
  • qos:服务质量。不同mqtt客户端负责的工作对信息准确性要求不同,qos用于决定数据信息的重要性,qos越大,信息越重要。
  • retainFlag:保留标志,客户端可能很长时间都不向服务器发送内容。如果该标志位为true,服务器会保留这个数据包,如果客户端很长时间不向服务器发送数据,而其他接收客户端又向服务器请求信息,服务器就会把保留的数据发送给请求客户端。
  • payload: 发布内容
  • dupFlag: 重发标志。为了确保信息的准确性,客户端可能会向服务端发送多次报文,如果是true,表示这是重发的。

4.2 订阅主题

   subscribe报文

  订阅报文一次可能订阅不止一个主题。

  这个报文也有qos

4.3 订阅确认

  suback报文

  客户端向服务端发送订阅主题的数据包时,服务器会向客户端进行回复

  报文中最重要的是订阅返回码

在这里插入图片描述

  如果订阅了多个主题,服务器会对订阅的每个主题进行单独的确认返回。

  订阅返回码与客户端发送的主题的Qos大小有关。

4.4 取消订阅

  客户向服务端发送unsubscribe报文

在这里插入图片描述

  一次性可以取消订阅多个报文

4.5 使用mqttfx软件进行模拟

在这里插入图片描述

mqttfx是一个很好的用来学习mqtt协议的软件,能够进行各种测试

5. mqtt 主题

5.1 主题的基本形式

  主题的基本形式就是一个字符串,需要注意以下几点:

  • 区分大小写
  • 主题可以使用空格,但是不建议使用
  • 不建议使用中文字符,因为很多服务端不支持中文字符

5.2 主题分级

   mqtt可以进行分级管理。使用/进行分割,如以下的四级主题

Tyler-1/motor/1/speed

5.3 主题通配符

5.3.1 单级别通配符+

在这里插入图片描述

  单级别通配符只能代替一个级别

5.3.2 多级别通配符#

在这里插入图片描述

  #必须放到最后

5.4 主题应用注意事项

  • 以$开始的主题

  以$开始的主题是mqtt服务端系统保保留的特殊主题,我们不能随意订阅或者向其发布信息

在这里插入图片描述

  • 不要以/开头作为主体

  会增加没有意义的级别
在这里插入图片描述

  • 主体不要使用空格

在这里插入图片描述

  • 在主题中嵌入客户端ID

  便于了解该主题是哪一个设备发布的

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值