我正在尝试使用创建许多 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/