MQTT 采用 TCP 长连接,需要心跳包机制来保证连接是活跃的,设备端 C-SDK 按照 MQTT 规范的 Keep Alive 机制,在 qcloud_iot_export_variables.h 里面有一个心跳包发送周期的默认设置:
在一个心跳发送周期内,如果设备端没有成功发送 MQTT 控制报文(包括 SUB/UNSUB/QoS1 PUB 报文,并收到相应的 ACK),则会发送 MQTT PINGREQ 给云端并等待云端回复 PINGRESP 报文,如果在一定时间内没有收到 PINGRESP 报文,则设备端认为连接已断开,会进行自动重连操作。