mqttkit 取消自动重连-mqttkit 如何取消自动重连

问题描述

mqttkit 如何取消自动重连

如题,项目需要,我们用mqtt协议做远程控制。通信双方为mqtt服务器和两个ios APP,A和B .
现在我用同一个账号(如账号:32456@qq.com 密码:123456)先在A客户端登录,然后再用这个账号登录B客户端。这时B会把A挤掉,重新连上,(重连成功后发订阅,也会一直发订阅)。待B登陆成功,A掉线后,A又自动重连。就这样一直挤掉对方。请问该如何取消mqtt Client的自动重连?

解决方案

int mosquitto_loop_forever(struct mosquitto *mosq, int timeout, int max_packets)
{
int run = 1;
int rc;
unsigned int reconnects = 0;
unsigned long reconnect_delay;

if(!mosq) return MOSQ_ERR_INVAL;

if(mosq->state == mosq_cs_connect_async){
    mosquitto_reconnect(mosq);
}

while(run){
    do{
        rc = mosquitto_loop(mosq, timeout, max_packets);
        if (reconnects !=0 && rc == MOSQ_ERR_SUCCESS){
            reconnects = 0;
        }
    }while(rc == MOSQ_ERR_SUCCESS);
    if(errno == EPROTO){
        return rc;
    }
    pthread_mutex_lock(&mosq->state_mutex);
    if(mosq->state == mosq_cs_disconnecting){
        run = 0;
        pthread_mutex_unlock(&mosq->state_mutex);
    }else{
        pthread_mutex_unlock(&mosq->state_mutex);

        if(mosq->reconnect_delay > 0 && mosq->reconnect_exponential_backoff){
            reconnect_delay = mosq->reconnect_delay*reconnects*reconnects;
        }else{
            reconnect_delay = mosq->reconnect_delay;
        }

        if(reconnect_delay > mosq->reconnect_delay_max){
            reconnect_delay = mosq->reconnect_delay_max;
        }else{
            reconnects++;
        }

#ifdef WIN32
Sleep(reconnect_delay*1000);
#else
sleep(reconnect_delay);
#endif

        pthread_mutex_lock(&mosq->state_mutex);
        if(mosq->state == mosq_cs_disconnecting
           || mosq->state == mosq_cs_connected){
            run = 0;
            pthread_mutex_unlock(&mosq->state_mutex);
        }else{
            pthread_mutex_unlock(&mosq->state_mutex);
            mosquitto_reconnect(mosq);
        }
    }
}
return rc;

}

解决方案二:

if(mosq->state == mosq_cs_disconnecting
|| mosq->state == mosq_cs_connected){
run = 0;

                    mqtt client 链接到服务器后,mosq->state 的状态是mosq_cs_connected,原来是if(mosq->state == mosq_cs_disconnecting
       ){
        run = 0;
                    }
                    要想跳出循环。在状态是mosq_cs_connected的时候也要跳出循环,在mosq_loop_forever(){}里设置 run = 0;就可以避免自动重连的while循环。
                    mqttkit 很久之前就没有更新了,mqttclient 会比较好点。ios的关于mqtt第三方库还是少了点。还有只支持swift 的cocomqtt.
时间: 2024-08-24 13:44:03

mqttkit 取消自动重连-mqttkit 如何取消自动重连的相关文章

vs c#-vs2012 空格自动补全功能怎么取消掉

问题描述 vs2012 空格自动补全功能怎么取消掉 有时候想输一个参数,空格以后跳出来一大堆 能不能关掉空格自动补全这个功能啊 解决方案 这个功能能节省你80%敲代码和记代码的时间,而且你说这的这种问题一般是参数你没定义好,先看看代码的原因吧

Win10屏幕自动变暗怎么办?Win10屏幕自动变暗的解决方法

在使用Windows 10系统的电脑的时候,空闲了一段时间笔记本屏幕就会自动变暗,该怎么取消变暗的情况呢?屏幕自动变暗是由于电源管理默认设置为[节能]模式导致的,下面小编就给大家带来Win10屏幕自动变暗的解决方法,一起来看看吧. 步骤: 1.在开始菜单上单击右键,选择[控制面板]: 2.在控制面板将查看方式修改为"大图标",在下面点击[电源选项]: 3.点击当前选择的电源计划左侧的[选择关闭显示器的时间]: 4.在下面将"用电池"和"接通电源"

表空间 数据文件-oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展

问题描述 oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展 CSDN移动问答oracle表空间中的数据文件自动扩展到32G后不再自动扩展,报ora-01653错误,我之后手动加了个数据文件,但是不久之后这个数据文件自动扩展到了32G又报错,请问这是什么原因,难道以后只能手动添加数据文件么????

chrome浏览器当表单自动填充时如何去除浏览器自动添加的默认样式_javascript技巧

一.发现该问题的原因-是在写账号登录页面时,input表单添加了背景图片,当自动填充,搓搓的一坨淡黄色背景出来. 这个原因是我草率的直接设置在input元素里面,结果问题就来了.所以如果把这个图标放在input表单外面,就不会出现这个问题. 二.表单自动填充会添加浏览器默认样式怎么处理和避免 第二张图,就是表单自动填充后,chrome会默认给自动填充的input表单加上input:-webkit-autofill私有属性 input:-webkit-autofill, textarea:-web

为什么已经自动登录会调用,即将自动登录不会调用,为什么啊????

问题描述 为什么已经自动登录会调用,即将自动登录不会调用,为什么啊?????? 解决方案 这是自动登录的触发条件了,看看写没写.[[EaseMob sharedInstance] application:application            didFinishLaunchingWithOptions:launchOptions];解决方案二:在appdelegate里写的吧,我写了解决方案三:自动登录的回调函数写在appdelegate或者你的主控制器中并且加上协议 :EMChatMan

怎么取消阿里旺旺2015记住密码和自动登录

  1.在已登录状态右键单击"阿里旺旺"图标, 2.弹出一个对话框,单击"更换用户", 3.弹出阿里旺旺登录界面,在"自动登录""记住密码"取消勾选,即可.

取消Paypal的自动续费和Yahoo的自动扣款协议

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 应淘宝"白花鱼"童鞋的要求,特撰此文,给刚使用paypal的朋友一些帮助.OK,切入正题. 现在很多朋友在注册雅虎1.99$的域名,很便宜,但是第二年续费的话要35美元左右(E网第一个域名www.it-my.com就是死在yahoo手里的,在此提醒大家要小心).于是很多站长会选择在域名注册60天后或者差不多快到期了的时候,

excel怎么取消自动超链接 excel连接怎么取消

excel取消自动超链接方法一:Ctrl + Z 还原 如我们现在输入http://www.111cn.net就会自动连接了,这时我们只要按Ctrl + Z 就可去掉连接了. excel取消自动超链接方法二:自动更正法 单击左上角的office按钮→excel选项→"校对"→ "自动更正选项"→"键入时自动套用格式"→取消勾选"Internet 及网络路径替换为超链接" 如果是批量链接我们取消方法有点不一样,下面我们利用自动更

wps自动备份功能开启与取消教程

一.我们在打开wps界面中点击[工具]-->[备份管理],然后在右边会弹出一个备份窗口了我们在这就可以备份了. 二.现在我们来设置同样是点击[工具]-->[选项],点击[常规与保存],这样就会自动备份了. 取消备份我们只需要把恢复选项中的勾勾去掉,点击确定即可.