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 @   HumorChen99  阅读(5)  评论(0编辑  收藏  举报  
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示