高并发情况下的漏桶算法(javascript版)
class LeakyBucket { //高并发情况下的漏桶算法 constructor(capacity, leakRate) { // 创建一个容量为capacity,每秒漏水量为leakRate的漏桶 this.capacity = capacity; this.leakRate = leakRate; this.water = 0; this.lastLeakTime = Date.now(); } allow(waterAmount) { const currentTime = Date.now(); const leakAmount = (currentTime - this.lastLeakTime) / 1000 * this.leakRate; this.water = Math.max(0, this.water - leakAmount); this.lastLeakTime = currentTime; if (this.water + waterAmount > this.capacity) { return false; // bucket overflow } else { this.water += waterAmount; return true; } } } const bucket = new LeakyBucket(5, 1); document.getElementById("asdf").onclick = function () { if(bucket.allow(1)){ console.log("走请求"); }else{ console.log("歇一会"); } }