MQTT知识【总结版】

1、消息等级QOS

一般呢,订阅设置为0,就可以了,那就说一下这个消息等级有什么用吧!

咱发送数据的时候也会携带一个消息等级:

假设是0 那么这条消息是不是真的发给MQTT服务器(Broker)了,就不知道了,如果设备多个,还真不敢保证真的发给服务器了。

假设是1 那么一个客户端发送消息以后呢,服务器一看消息等级是1,那么就会回给那个发送消息的客户端一个应答消息。客户端发送完消息以后其实内部会启动一个超时操作,如果多少时间内没有回复,那么它会再发一次

假设是2 这个呢就是消息一定要到达MQTT服务器.这个很苛刻,也比较占用内存

2、订阅/发布消息

一般包括以下内容

  • 发布/订阅的主题
  • 消息
  • 回传标志(默认0)
  • 消息等级【见1】
  • 是否需要服务器保留消息【下面同医嘱一起讲】
  • 消息的标识(一般用不到,默认1就可以)

3、遗嘱(will)

假设我手机和一个设备订阅主题和发布主题对应,我就能和这个设备通信了但是,我怎么知道这个设备掉线了呢?当然完全可以自己发信息给那个设备,如果不回复,就说明掉线了。

但是呢,MQTT服务器提供了一种方式假设我设置好设备的遗嘱消息是 offline 遗嘱发布的主题是 aaaaa,如果设备掉线,服务器就会给订阅了aaaaa的客户端发送 offline。

【注】:服务器如果在你设置的心跳包时间的1.5倍时间内,收不到心跳包就认为你掉线了。

4、心跳包

MQTT规定的,发送完连接协议之后,发送的心跳包数据是C0 00

发送时间:连接协议里面的心跳包时间(你可以提前发),然后服务器回复 D0 00


MQTT的C语言库一点记录

  • 官方库里面判断返回的数据

使用MQTTPacket_read(数据解析完存到的数组,数组长度,提取数据函数),最主要的是这个 提取数据函数transport_getdata,这个函数的格式不能变,官方规定的就是这个格式。
在这里插入图片描述

其中,Usart1ReadBuff为网络模块接收到的数据储存的地方,根据实际需要修改。

发布了653 篇原创文章 · 获赞 1016 · 访问量 73万+

猜你喜欢

转载自blog.csdn.net/ReCclay/article/details/104024625