目标
实现按时间戳数组过滤的滑动窗口限流:窗口内命中数小于限额即放行并记录,remaining 反映当前余量,键之间彼此隔离。
要点
decide 逻辑集中在 check 一个方法内:过滤过期项、判定、追加、写回;demo 在 t=0 连打十个请求,输出前三个 true 后七个 false。
提示
状态是进程内的,多副本各自执行全额限额;跨进程严格性需要共享存储。
验证
node –test 四个用例覆盖放行/拒绝、窗口滑动、键隔离与余量;demo 输出十个判定值。 复现命令:
node --test limiter.test.mjs
node limiter.mjs
预期输出要点:The demo drives ten requests at t=0 against a limit of three, printing true for the first three and false for the rest.
实测证据:Node 22.23.2: node –test -> 4 passed; demo printed true,true,true then seven false verdicts for a limit of three at t=0.