MQTT_client断开和重连的问题,求解答。急!
用了MQTT的例程,上电正常运行,按键触发Publish Topic后想断开连接,调用函数lRetVal = sl_ExtLib_MqttClientDisconnect(user_con_conf->clt_ctx);发现卡死在这个函数,没有返回值。之后测试发现,只有超时调用回调函数static void sl_MqttDisconnect(void *app_hndl)之后,再运行这个sl_ExtLib_MqttClientDisconnect(user_con_conf->clt_ctx);函数才不会卡死
请问:是我调用方式不对,还是确实存在这个问题。若是我调用方式不对,那该如何自己断开连接,然后切换网络重连。纠结了好几天了,之前发帖有网友建议重启芯片,但是目前这个方式对我来说不可行。希望大家给个建议,指导下。
可以设置个复位函数吗?比如看门狗复位。或者就别开来正中错误的方法了,你已经知道了正确发方式,如果非在原来的基础上做,设置个超时复位最好不过了
应该有液晶显示的部分,所以复位不太合适。暂时就不考虑了。
然后没有发现正确的方式,只是发现超时之后能调用disconnet函数不卡死而已,超时重连还是有问题,按例程里那个超时重新连上网之后跑会卡死在sl_ExtLib_MqttClientConnect函数上面。。。
第二次发这个MQTT的帖了,结果还是只有你回复我,很感谢。
1. 能不能把main.c里面的结构体改成下面的,这是把30改成了300。有时候因为网络的关系所以不稳定。
/* library configuration */
SlMqttClientLibCfg_t Mqtt_Client={
1882,
TASK_PRIORITY,
300,
true,
(long(*)(const char *, ...))UART_PRINT
};
Let’s increase the timeout from 30 to 300 in case network stability issue .
2. 还有就是函数tcp_recv在 cc31xx_sl_net.c里面,有DEBUG的选项,能否把这个打开之后给我看一下相应的LOG。
我每次调用smartconfig成功后,我又重启网络了(调用sl_stop和sl_start),所以一直不成功,但是不太明白,重启网络后,我重新建立连接为什么不行?
你重启网络后世WIFI连不上了吗?还是MQTT连不上了?
WIFI连上了,有打印信息,然后MQTT连不上,goto connect_to_broker后,程序跑到sl_ExtLib_MqttClientConnect函数就卡住了。
那建议你把MQTT专门做个task, 每次要重启WIFI的时候,就先把这个task干掉,然后WIFI连上之后再启动。
我也遇到了同样的问题
而且我发现,不仅仅是主动调用sl_ExtLib_MqttClientDisconnect()会出现卡住不返回的情况,
有时因为网络原因导致MQTT连接断开时会出现一样的情况。
举例我的应用场景,我有一个比较大的数据包,我将其拆分为很多段不停地调用Mqtt_Client_Public()发出,在该过程中因为网络原因导致MQTT连接断开,这种状态下Mqtt_Client_Public()调用同样出现了卡住不返回的情况
请问LZ和TI的兄弟,这个问题目前有什么解决思路吗?
卡死在函数里面,感觉无解啊,加个看门狗复位看看。我数据间隔比较久,还没遇到pub数据卡死的情况。但长时间运行MQTT还是有问题,有时候都到mqtt断开的回调函数,我重新连MQTT还会出现连接失败的情况。尴尬。
谢谢,目前来看也只有这个办法了