mqtt断线重连注意事项

    技术2022-07-10  147

    现在有不少项目的网络通讯都会使用到mqtt协议,MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,所以现在很多项目都会用到mqtt协议。

    既然是网络上使用的通讯协议,那么断线重连就很重要,我自己做项目当中也遇到了这个问题,在mqttC++的开源库中,断线重连有一个官方提供的方式,就是在MQTTClient_connectOptions 这个结构体中的autoreconnect,只要把这个变量赋1,系统库就会自动帮你完成断线重连的工作,是非常方便的,但是呢,在很多海思的交叉编译工具当中是不支持到C++11的,这样就是使得mqttC++的官方开源库无法使用,只能用C的开源库,这个里面就不带断线重连的功能了,这样我们用户就只能自己实现这个功能。

    这个里面会有一个坑,本身开源代码中会有 MQTTClient_setCallbacks(gMQTTClient, NULL, connlost, msgarrvd, delivered); 这个接口,这个里面的connlost就是断线之后的回调函数,这个里面需要我们自己添加代码,其实对于大部分程序员来说,断线了,我们做一个不断尝试重连的工作,直到连上了为止,这个思路并不难,但是mqtt不可以直接disconnect,然后尝试重连,这样会不断地占用socket,具体是什么原因造成的我也没有找到,应该是库里的代码造成的,这里需要直接MQTTClient_destroy掉整个对象,然后重新creat才可以,这里是个坑,需要注意。

    原文链接:https://www.ebaina.com/articles/140000003853

    Processed: 0.020, SQL: 8