IOT透传数据,使用mqtt通讯协议,qos = 1。网络不畅时,客户端做限流处理。
初始化:AtomicInteger limit = 0;
canSendTime = loadCanSendTime();
if(null == canSendTime){canSendTime = now();}
发出任何条指令,
toSend:
if(limit < 5 && now() > canSendTime){
send();
limit.incrementAndGet();
}else{
canSendTime = now() + 超时时间;
saveCanSendTime();
//超时解锁,相当于延迟收到一条通知指令receive()
handler.delayUnlock();
//网络不畅,不能发送
锁定全部按钮;
}
收到通知指令,
receive:
if(!limit.compareAndSet(0,0)){
limit.decrementAndGet();
}
canSendTime = now();
//网络畅通
解锁全部按钮;