山水指尖 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 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile
  • ¥15 写uniapp时遇到的问题
  • ¥15 vs 2008 安装遇到问题
  • ¥15 matlab有限元法求解梁带有若干弹簧质量系统的固有频率
  • ¥15 找一个网络防御专家,外包的
  • ¥100 能不能让两张不同的图片md5值一样,(有尝)
  • ¥15 informer代码训练自己的数据集,改参数怎么改
  • ¥15 请看一下,学校实验要求,我需要具体代码