在java中有时候要用到流量控制,比如发Socket消息,websevice开放接口,对于账号或ip进行流量控制
今天自己写写了思路
新建一个类保存基本信息,
1.记录间隔时间 IDLE_TIME ,次数 TIMES, IDLE_TIME /TIMES 就为流控
2.新建一个static List 对象用于保存时间点对象
3.每次发消息或接受消息前都把当前系统时间 System.currentTimeMillis(); 和相应的对象记录在list中
4,新建一个conrolFlow,如下。
//间隔时间
public static long IDLE_TIME = 1000 ;
//间隔时间的请求或发送次数
public static long TIMES = 1 ;
public static Vector list = new Vector();
public synchronized static void contrlFlow(){
int count = 0;
for(int i = list.size()-1 ; i>=0 ;i++){
Long regTime = (Long) list.get(i);
long currentTime = System.currentTimeMillis();
long sleepTime = regTime + IDLE_TIME - TIMES;
if(sleepTime>0){
count++;
}
if(count>=TIMES){
//TODO 需要进行流控,在此实现
break;
}
}
}
5.新建启动一个CleanThread ,定期清理 list 对象,不然访问太多,java回内存溢出
总结:听起来很高级,实现起来还是很简单,主要还是思想很重要,语言是死地,人是活动
第一次发帖,希望有人拍砖