赞
踩
1、启动mqtt服务器;启动模拟AI server的mqtt客户端
2、启动AI程序
3、ctrl+c中断mqtt服务器
4、AI程序提示重新连接,然后段错误异常退出
mqtt服务器退出时,直接在connlost回调函数中调用MQTTAsync_connect函数进行重新连接会出错。
经查询,paho-mqtt库提供了重连机制。要将automaticReconnect参数设置为1,且调用MQTTAsync_setConnected(client, (void *)client, onConnected)进行重连,并在onConnected再次进行订阅。
核心代码如下:
1)在mqtt_init()函数中增加如下代码:
conn_opts.automaticReconnect = 1;
conn_opts.minRetryInterval = 2; //seconds
conn_opts.maxRetryInterval = 365*24*60*60;
while(1)
{
rc = MQTTAsync_setConnected(client, (void *)client, onConnected);
if (rc == MQTTASYNC_SUCCESS)
{
printf("Successfully setConnected.\n");
break;
}
sleep(0.5);
printf("Failed to setConnected, return error code %d.\n", rc);
}
2)新增函数:
void onConnected(void* context, MQTTAsync_successData* response)
{
printf("Successful reconnection\n");
get_mesg_start();
}
3)去掉connlost中调用MQTTAsync_connect函数的部分。
服务器退出后,程序提示失去连接,且程序照常运行。服务器重新启动后,程序提示重新连接成功,并可正常收发消息。
1、启动mqtt服务器;启动模拟AI server的mqtt客户端
2、启动AI程序
3、模拟AI server下发消息,其中将type字段的内容,从“GET_FEATURES”改为“GET_FEATURE”
4、log一直报type error错误,将“AI_MOD”改为“AI_MODD”时也报type error错误。
回调函数msgarrvd返回值为0时,会进行重复发送。
让回调函数msgarrvd返回值不为0。
1、启动mqtt服务器;启动模拟AI server的mqtt客户端
2、启动人脸导入AI程序
3、模拟AI server下发消息,其中将type字段的内容,从“GET_FEATURES”改为“GET_FEATURE”或 将module字段的内容,从“AI_MOD”改为“AI_MODD”
4、程序Segmentation fault异常退出。
message和topicName不能释放掉。
mqttAsync_common.c的msgArrvd函数中去掉两行代码:
MQTTAsync_freeMessage(&message);
MQTTAsync_free(topicName);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。