const rate_limit=require('./RateLimitUtil')
rate_limit.config(5)
setInterval(function () {
if(rate_limit.isExecutable()){
console.log('现在的QPS是'+rate_limit.getQPS()+',允许执行')
}else{
console.log('现在的QPS是'+rate_limit.getQPS()+'拒绝执行')
}
},100)
let conf={
qps:1000
}
let exeLog=new Array()
let fresh=function(){
let now=new Date().getTime()
now=now-now%1000
let top_limit=now+1000
let newExeLog=new Array()
for(let i=0;i<exeLog.length;i++)
{
let item=exeLog[i]
if(!(item>top_limit||item<now))
{
newExeLog.push(item)
}
}
exeLog=newExeLog
}
let isExecutable=function () {
fresh()
if (getQPS()<conf.qps){
exeLog.push(new Date().getTime())
return true
}
return false
}
let getQPS=function(){
return exeLog.length
}
let reset=function(){
exeLog=new Array()
}
let config=function (qps) {
conf.qps=qps
}
module.exports={
config:config,
isExecutable:isExecutable,
getQPS:getQPS,
reset:reset
}