高并发情况下的漏桶算法(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("歇一会");
				}
			}

  

posted @ 2023-12-12 13:27  mrt_yy  阅读(9)  评论(0编辑  收藏  举报