[英]Is it possible to limit the number of web request per second?
嗨,我正在抓住网站并阅读内容。我想保持请求率合理。 每秒最多大约10个请求应该是可以的。目前它是每分钟5k请求并且它导致安全问题,因为这看起来是机器人活动。 这该怎么做? 这是我的代码
protected void Iterareitems(List<Item> items)
{
foreach (var item in items)
{
GetImagesfromItem(item);
if (item.HasChildren)
{
Iterareitems(item.Children.ToList());
}
}
}
protected void GetImagesfromItem(Item childitems)
{
var document = new HtmlWeb().Load(completeurl);
var urls = document.DocumentNode.Descendants("img")
.Select(e => e.GetAttributeValue("src", null))
.Where(s => !string.IsNullOrEmpty(s)).ToList();
}
您需要System.Threading.Semaphore ,使用它可以控制最大并发线程/任务。 这是一个例子:
var maxThreads = 3;
var semaphore = new Semaphore(maxThreads, maxThreads);
for (int i = 0; i < 10; i++) //10 tasks in total
{
var j = i;
Task.Factory.StartNew(() =>
{
semaphore.WaitOne();
Console.WriteLine("start " + j.ToString());
Thread.Sleep(1000);
Console.WriteLine("end " + j.ToString());
semaphore.Release();
});
}
您可以看到最多3个任务正在运行,其他正在等待semaphore.WaitOne()
因为达到了最大限制,如果另一个线程通过semaphore.Release()
释放信号semaphore.Release()
,则挂起的线程将继续。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.