采用 MQTT 方式完成数据的传输,设备正常接入 Wi Fi 网络后,首先单片机作为客户端会主动去连接 MQTT 服务器,连接服务器时,客户端需要向服务器端发送'CONNECT'的报文,当服务器端收到连接请求后,认为连接有效后则会返回'CONNACK'的报文,表示连接成功。无论是发布者或者是订阅者都是属于客户端,在数据通讯前都需要连接到服务器,走完'CONNECT'和'CONNACK'两个报文的流程,在客户端连接上服务器后,客户端与服务器端还需要通过心跳包确保客户端正常在线,所以客户端需要定时向服务器端发送'PINGREQ'心跳包,以此表明客户端正常在线,而服务器在收到'PINGREQ'心跳包后,会返回'PINGRESP'以做响应。如果'PINGREQ'心跳包发送超时,服务器则会断开该客户端的连接。

在 MQTT 客户端连接服务器后,客户端需要上报数据,此时客户端作为发布者,需要对指定的主题发送数据。在发送数据时,MQTT 通讯方式还有三种发送方式,每种方式都有自己的特点,正如图 4.9 中的'PUBLISH qos0','PUBLISH qos1','PUBLISH qos2',第一种方式,服务器接收到数据后直接转发到订阅者,但是服务器不会反馈消息给发布者,因此设备不知道数据是否发送成功,对于服务器也只能有且一次接收到该数据;第二种方式,服务器在收到发布者发布的数据后转发到订阅者,订阅者也会反馈'PUBACK qos1'到服务器,服务器也会反馈对应的'PUBACK qos1',但是由于接收反馈信息的时间不确定,所以发布者也许会多次发送同一条数据,所以 MQTT 的第二种数据发送方式导致服务器和订阅者至少接收到一条信息;关于第三种发送方式,系统机制通过反复的'PUBREC qs2','PUBREL qs2','PUBCOMP qs2'保证订阅者有且接收到一次来自发布者的主题数据。在本次设计中,在 MQTT 协议版本介绍中,针对不间断传感器数据的传输中使用发送方式一最为合理,所以本次设计中的主题发送采用'PUBLISH qos0'。

不论是 MQTT 服务器中的订阅者还是发布者,作为客户端在断开与服务器连接后,都会收到机制本身的断开指令'DISCONNECT',表示本次连接断开。

总结起来,MQTT 通讯方式实现数据传输的流程包括:客户端连接服务器,发送'CONNECT'报文,接收'CONNACK'报文确认连接成功;客户端定时发送'PINGREQ'心跳包,服务器返回'PINGRESP'响应;发布者通过'PUBLISH'报文将数据发送到指定主题,采用'PUBLISH qos0'方式保证数据传输最为合理;订阅者接收到数据后可以反馈'PUBACK'报文确认接收成功;最后客户端断开与服务器的连接,接收'DISCONNECT'指令。

MQTT 数据传输流程详解:连接、心跳、发布、订阅、断开

原文地址: https://www.cveoy.top/t/topic/n7dP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录