我正在构建一个服务器应用程序,需要持续对其他几台服务器执行大量的http请求。目前,我基本上设置了大约30个线程,并在每个线程上同步连续运行HttpWebRequests,实现了每秒约30个请求的吞吐量。
我确实在app.config中设置了ServicePoint ConnectionLimit,因此这不是限制因素。
我需要大幅度扩大规模。至少我需要更多的CPU马力,但我想知道我是否会通过使用HttpWebRequest对象的异步方法(例如:.BeginGetResponse())获得任何优势,而不是自己创建线程并使用这些线程上的同步方法(例如:.GetResponse())。
如果我使用异步方法,我显然必须重新设计我的应用程序,所以我想知道是否有人可能在我去之前有一些见解并重新编码所有内容,以防我出去吃午饭。
谢谢!
答案 0 :(得分:1)
答案 1 :(得分:0)
Async Httprequest / winsock陷入了大约30-50 req / sec。没有测试同步winsock,但我想它会给你与httpwebrequest相同的结果。
测试反对1 200 000个博客供稿。
上个月一直在苦苦挣扎,所以知道是否有人设法从.net中挤出更多内容会很有趣吗?
修改
新测试:使用xfserver iocp组件获得350req / sec。在任何更大的结果之前使用一堆线程,每个线程都有一个实例。 lib的“客户端部分”有一些非常烦人的错误,使得实现比“服务器部分”更难实现。不是你要求的,不是推荐的,而是一些步骤。
下一篇:前winsock测试没有使用3.5 SocketAsyncEventArgs,这将是下一个。
<强> ANSWER 强>
你的问题的答案,不值得努力。 异步HttpWebRequest方法卸载主线程,同时在后台保持下载,但它不会提高请求的数量/可伸缩性。 (至少不是3.5,在4.0中可能有所不同?)
然而,可能值得关注的是构建自己的包装异步套接字/ SocketAsyncEventArgs,其中iocp可以工作,并且可能实现类似于HttpWebRequest的开始/结束模式(在当前代码中最简单的实现)。改善真的很大。