本文参考:https://blog.csdn.net/u014730658/article/details/79374356
本文参考:https://blog.csdn.net/manzhizhen/article/details/52606732
RateLimter实现了令牌桶的限流算法
假设我们希望每秒最多发送5个请求,那么相当于每0.2秒发送一个。
- 当第一个请求发送后,记为开始,即0秒。
- 0.1秒时,来了第二个请求,这时候还没到第0.2秒(可以认为当前令牌数为0),那么我们不需要考虑别的,等到0.2秒就能执行,但是,必须知道,这时候,下次允许执行的请求时间应该是第0.4秒了。
- 假如第二个请求执行完后,到2.0秒还是没有新的请求到来,那么我们可以理解0.4秒到2秒的空闲时间就保存了5个令牌(最多不能超过5个,而且这个计算实际上是在新请求到来的时刻计算出来的)。
- 当2.1秒时,有新请求进来了
如果它需要消耗3个请求,那么它可以立刻执行,然后存储令牌就变成了2个,而且如果此时再有新请求进来,可以立刻执行(smoothbursty),或者等待一个消耗3个存储令牌的积分时间执行(smoothwarmingup)。
如果它需要消耗9个请求,那么它也可以立刻执行,然后存储令牌清空,而且如果此时再