一.基本函数
1.keepalive=10设置对话断线后存活时间为10秒
mosquitto_connect(mosq_sub, mqtt_host, mqtt_port, keepalive)
2.客户端连接成功执行这个回调函数
void on_connect_wrapper(struct mosquitto *mosq, void *userdata, int rc)
3.客户端订阅成功
void on_subscribe_wrapper(struct mosquitto *mosq, void *userdata, int mid, int
qos_count, const int *granted_qos)
3.断线10秒后,客户端离线超时执行这个回调函数
void disconnect_wrapper(struct mosquitto *mosq, void *userdata, int rc)
二.函数测试
1.启动mqtt应用程序
当客户端连接成功会执行on_connect_wrapper
当客户端订阅成功会执行on_subscribe_wrapper
2.模拟MQTT断线情况,将虚拟机的网络断开,超多10秒后会执行 disconnect_wrapper回调函数
3.
当网络恢复后,MQTT会从新建立连接,连接成功,会执行on_connect_wrapper,要注意要将之前的topic重新订阅,否则接受不到消息。重新订阅成功也会执行on_subscribe_wrapper这个回调函数
void on_connect_wrapper(struct mosquitto *mosq, void *userdata, int rc){
bool clean_session = true;
int ret = 0;
int qos = 0;
int mid = 2;
printf("on_connect_wrapper------------------\n");
// resub
if(flag_disconnect == 1){
printf("reconnect_wrapper------------------\n");
mosquitto_subscribe(mosq_sub, &mid,"/aliyun/vpn/#", qos);
printf("resub OK\n");
}
flag_disconnect = 0;
}
热门工具 换一换