NodeJS 频繁请求服务器限速工具

  • 示范
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
}
posted @ 2020-11-21 12:01  HumorChen99  阅读(8)  评论(0)    收藏  举报  来源