我正在构建一个服务器应用程序,它需要持续向其他几个服务器执行大量 http 请求。目前,我基本上设置了大约 30 个线程并在每个线程上同步运行 HttpWebRequests,实现每秒大约 30 个请求的吞吐量。
我确实在 app.config 中设置了 ServicePoint ConnectionLimit,因此这不是限制因素。
我需要大幅扩大规模。至少我需要更多的 CPU 马力,但我想知道我是否会通过使用 HttpWebRequest 对象的异步方法(例如: .BeginGetResponse() )而不是自己创建线程并使用这些线程上的同步方法(例如: .GetResponse() )。
如果我使用异步方法,显然我必须重新设计我的应用程序,所以我想知道在我去重新编码所有内容之前是否有人可能有一些见解,以防我出去吃午饭。
谢谢!
最佳答案
如果您使用的是 Windows NT,则 System.Net.Sockets.Socket 类始终使用 IO Completion 端口进行异步操作。异步模式下的 HTTPWebRequest 使用异步套接字,因此将使用 IOCP。
如果不进行详细的基准测试,很难说我们的瓶颈是在 HttpWebRequest 内部,还是在堆栈上,在您的应用程序中,还是在远程端,在服务器中。但是,可以肯定的是,asyncc 会立即为您提供更好的性能,因为它最终会在幕后使用 IOCP。重新实现异步应用程序并不困难。
因此,我建议您首先将应用程序架构更改为异步。然后查看您获得的最大吞吐量。然后,您可以开始进行基准测试并找出瓶颈所在,然后将其消除。
关于c# - 扩展多个 HttpWebRequests?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3232637/