Loading...
mqtt断线重连注意事项
Tracy_9216 发布于 06/29 11:06 浏览 78

现在有不少项目的网络通讯都会使用到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才可以,这里是个坑,需要注意。

*本文仅代表作者观点,不代表易百纳技术社区立场。系作者授权易百纳技术社区发表,未经许可不得转载。

点赞2
收藏3

精彩评论

内容存在敏感词

自媒体


海思讨论群

Opencv双目视觉

联系我们
客服QQ: 1289459644
客服手机: 17714209983
确定要删除此文章、专栏、评论吗?
确定
取消

详细的问题描述有助于平台快速解决问题

屏幕截图
问题描述