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