c# - 当客户端同时发送大量请求时,HttpWebRequest 需要很长时间才能发送

标签 c# httpwebrequest

我正在尝试使用创建许多 HttpWebRequest (1000+) 的 C# 负载测试客户端对 Comet-ish 服务器进行负载测试。我发现几分钟后,服务器随机地需要很长时间才能接收某些请求。客户端认为发送请求成功,但实际上需要40s才能到达服务器,此时已经太晚了。 (由于这是 Comet 类型的服务器,因此服务器最终会丢弃客户端 session ,这很糟糕)。我尝试从异步调用切换到同步调用,但没有什么区别。

问题肯定出在客户端。我用 Wireshark 进行了一些跟踪,结果发现该请求实际上需要 40 秒左右的时间才能从客户端软件到达网络管道!服务器在其管道上收到请求后立即处理该请求。

也许 C# 搞砸了,因为该请求看起来与我之前发出的请求完全相同,并且出于某种奇怪的原因对其进行了缓存?我在响应中包含“Cache-Control:no-cache”以避免完全缓存。

最佳答案

当我第一次构建网络爬虫时,我遇到了类似的问题,该爬虫每分钟发出超过 2,000 个请求。问题是我并不总是及时处理 HttpWebResponse 对象。当您以该速率发出请求时,垃圾收集/终结机制将无法跟上。

无论您执行同步请求还是异步请求并不重要。只需确保始终调用 response.Close()

关于c# - 当客户端同时发送大量请求时,HttpWebRequest 需要很长时间才能发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3612992/

相关文章:

c# - 以编程方式自动化 Web 登录

vb.net - 必须使用适当的属性或方法 - TwitchAPI 修改 'Accept' header

c# - 请求被中止 : The connection was closed unexpectedly

c# - ISO3166 国家/地区的枚举 - 可接受的做法?

C# 验证多个文本框?

c# - C# 中的不可变类型和属性

c# - 从 HttpResponse 读取特定的 div

ASP.NET:httpwebrequest 日期 header 解决方法

c# - 从 web.config 读取成员资格部分

c# - ScrollViewer 和 LonglistSelector Scrollbar 冲突