示范
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
}
/*
是否可执行
true 没有超速
false 即将超速不允许执行
*/
let isExecutable=function () {
fresh()
if (getQPS()<conf.qps){
exeLog.push(new Date().getTime())
return true
}
return false
}
/*
获取现在的QPS
*/
let getQPS=function(){
return exeLog.length
}
/*
重置
*/
let reset=function(){
exeLog=new Array()
}
/*
配置qps
*/
let config=function (qps) {
conf.qps=qps
}
module.exports={
config:config,
isExecutable:isExecutable,
getQPS:getQPS,
reset:reset
}