我发现another question要求提供相同类型的功能,但问题已超过2年,所以我想知道从那以后有没有人见过。
我基本上使用标准.NET套接字编写了自己的asynchronous http/socket client。我维护了一个1024个套接字的池,我有128个“服务”线程,使用套接字池从互联网上下载网页的速度高达每秒371页(今天只在亚马逊的EC2服务器上进行了测试)。我还创建了另一个异步HTTP客户端,它使用HttpWebRequest
来异步下载网页,但它的速度非常慢:我的吞吐量平均每秒约50页(也在亚马逊的EC2上测试)使用相同的设置:1024 pooled { {1}}和128个“服务”线程。
当然,提供HTTP协议支持将占用更多的处理能力和内存。我希望通过亚马逊的超大型EC2服务器,我不会受到处理能力/内存的限制,而只受网络带宽的限制(到目前为止一直如此)。
我正在使用的机器的一个例子是亚马逊的高CPU超大型实例:
- 7 GB内存
- 20个EC2计算单位(8个虚核,每个计算单位2.5 EC2)
- 1690 GB的实例存储
- 64位平台
- I / O性能:高
- API名称:c1.xlarge
我可以编写自己的HTTP处理,它符合HTTP协议,但如果有一个快速而强大的现成解决方案,它将为我节省大量的工作,痛苦和痛苦。
我至少需要以下功能:
有人知道任何此类解决方案吗?
答案 0 :(得分:3)
我不知道HttpWebRequest
内部如何使用套接字。打开/关闭套接字可能会受到很大的打击。 WebClient
使用keep-alive可能会更好。
编辑:我做了一些谷歌搜索,我不接受这个作为答案。 WebClient似乎是HttpWebRequest / Response的包装器:http://www.codeproject.com/Articles/156610/WP7-WebClient-vs-HttpWebRequest.aspx?msg=3775084
由于你已经开始使用套接字,我会坚持使用它们。随意从我的网络服务器项目中获取内容:http://webserver.codeplex.com
我的解析器:
http://webserver.codeplex.com/SourceControl/changeset/view/56552#671689