如题,项目需要,我们用mqtt协议做远程控制。通信双方为mqtt服务器和两个ios APP,A和B .
现在我用同一个账号(如账号:32456@qq.com 密码:123456)先在A客户端登录,然后再用这个账号登录B客户端。这时B会把A挤掉,重新连上,(重连成功后发订阅,也会一直发订阅)。待B登陆成功,A掉线后,A又自动重连。就这样一直挤掉对方。请问该如何取消mqtt Client的自动重连?
mqttkit 如何取消自动重连
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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);
#endifpthread_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怎么处理论文引理引用参考文献