山水指尖 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 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献