我编写了一个 API 速率限制器来与 Last.fm 的 API 一起使用。
Last.fm 的 Tos 指出,我在 5 分钟内平均每个原始 IP 地址每秒不能发出超过 5 个请求。
这是我写的课程:
public class RateLimiter
{
private static readonly List<DateTime> _requests = new List<DateTime>();
private const double _perMillisecond = 1000.1;
private const int _rateLimit = 5;
private const int _rateLimitCooldownMs = 500;
public static void CheckLimiter()
{
_requests.Add(DateTime.Now);
var requestsDuringRateLimit = _requests.Where(w => (DateTime.Now - w).TotalMilliseconds < _perMillisecond).ToArray();
if (requestsDuringRateLimit.Count() >= _rateLimit)
{
Thread.Sleep(_rateLimitCooldownMs);
_requests.Clear();
Console.Clear();
}
}
}
该CheckLimiter
方法在HttpWebRequest
启动之前调用,这是限制API请求的好方法吗?