山水指尖 2016-02-22 06:44 采纳率: 0%
浏览 3250

mqttkit 如何取消自动重连

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

  • 写回答

2条回答 默认 最新

  • 山水指尖 2016-02-25 08:09
    关注

    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;
    

    }

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧