MQTT协议详解:消息重发与排序规则

需积分: 32 34 下载量 191 浏览量 更新于2024-08-08 收藏 988KB PDF 举报
"本文档是关于MQTT协议的详细指南,特别是针对rda5807编程中的消息排序和重试机制。主要内容包括MQTT协议的4.4章节消息分发重试、4.5章节消息收到以及4.6章节消息排序的规范。" 在MQTT协议中,消息排序和重试机制对于确保可靠的数据传输至关重要。4.4章节强调了当客户端设置CleanSession标志为0时,重连后客户端和服务端如何处理未确认的消息。根据MQTT-4.4.0-1规定,如果QoS(服务质量)大于0,任何未确认的PUBLISH(发布)报文和PUBREL报文都必须使用原始的报文标识符重发。这一规则旨在解决TCP网络中可能出现的数据丢失问题,尤其是在旧版网络环境中。 4.5章节涉及消息接收的处理。服务端在接收应用消息时,需要将其添加到与客户端订阅匹配的会话状态中,匹配规则在4.7章节中定义。客户端不仅应接收与其订阅精确匹配的消息,还可能收到服务端自动分配订阅或处理UNSUBSCRIBE请求期间的消息。不论是否处理应用消息,客户端必须根据QoS级别确认收到的PUBLISH报文(MQTT-4.5.0-2)。 4.6章节详细阐述了客户端和服务器在处理消息排序时应遵循的规则。这些规则确保了消息传递的顺序性和一致性: 1. 对于QoS 1和QoS 2的PUBLISH报文,客户端在重发时必须保持原始发送顺序(MQTT-4.6.0-1)。 2. 对于QoS 1的PUBLISH报文,客户端发送PUBACK报文时需按对应PUBLISH报文的顺序进行(MQTT-4.6.0-2)。 3. 对于QoS 2的PUBLISH报文,客户端发送PUBREC报文和PUBREL报文也需按照相应的PUBLISH报文顺序(MQTT-4.6.0-3和MQTT-4.6.0-4)。 此外,服务端默认假设每个主题都是有序的。但为了应对不同应用场景,服务端可以提供管理功能或机制,允许将一个或多个主题设置为无序模式(MQTT-4.6.0-5)。这为实现灵活的消息处理策略提供了可能性。 MQTT协议3.1.1版是OASIS标准,提供了 MQTT 的详细规范和文档,包括中文版,方便开发者理解和实施。该协议由MQTT技术委员会维护,旨在促进结构化信息标准的使用,由IBM等公司参与编辑和贡献。
2021-04-21 上传
STM8S208R8概述: STM8S208R8是意法半导体发布的针对工业应用和消费电子开发的微控制器STM8S系列产品。 STM8S平台打造8位微控制器的全新世代,高达20 MIPS的CPU性能和2.95-5.5V 的电压范围,有助于现有的8位系统向电压更低的电源过渡。新产品嵌入的130nm非易失性存储器是当前8位微控制器中最先进的存储技术之一,并提供真正的EEPROM数据写入操作,可达30万次擦写极限。在家用电器、加热通风空调系统、工业自动化、电动工具、个人护理设备和电源控制管理系统等各种产品设备中,新产品配备的丰富外设可支持精确控制和监视功能。功能包括10位模数转换器,最多有16条通道,转换用时小于3微秒;先进的16位控制定时器可用于马达控制、捕获/比较和PWM功能。其它外设包括一个CAN2.0B接口、两个U(S)ART接口、一个I2C端口、一个SPI端口。 RDA5807P全数字收音机概述: 整体设计以STM8S208R8为核心,通过CP2102输入所需电台,由OLED12864显示出来。收音部分由RAD5807P来实现,此次设计用的是外部EEPROM存储器24C64来实现掉电保护。另外用到了RS232电路来实现与PC间的通信,可以直接从PC上看到电台的参数 总体框图: 本项目使用硬件资源: 1. STM8S208R8内核,64KFalsh 6KRam 2KEEPROM @24MHz 2. USB-UART接口,采用CP2102芯片 3. OLED显示模块,分辨率128*64 pix 高速SPI接口驱 4. MAX232芯片,UART转RS232接口 5. AT24C64 I2C接口存储芯片 6. RDA5807P 全数字收音机模块,耳机输出 RDA5807P全数字收音机实现功能: 以STM8S208R8为核心,本项目中用的RDA5807P全数字收音机模块 ,搜索了4个电台,每隔5s自动切换一个电台,耳机输出。液晶屏幕用的是OLED显示模块,分辨率128*64 pix 高速SPI接口驱,并且同时把频道显示在液晶屏幕上。将之前已经搜索到的4个电台的频率存到EEPROM 24c64中,并且可以再从24c64中读出以便需要时使用,USB转串口显示24C56中存储的电台。 视频演示显示结果: 程序源码截图: 附件内容截图: