使用异步套接字客户端的原始HTTP解析

本文关键字:原始 HTTP 解析 客户端 异步 套接字 | 更新日期: 2023-09-27 17:54:23

我发现了另一个要求相同类型功能的问题,但这个问题已经超过2年了,所以我想知道从那以后是否有人看到过任何东西。

我基本上已经用标准的。net套接字编写了我自己的异步http/套接字客户端。我维护一个有1024个套接字的池,我有128个"服务"线程使用套接字池从互联网下载网页,速度高达每秒371个页面(今天刚刚在一台Amazon的EC2服务器上测试过)。我还做了另一个异步HTTP客户端,它使用HttpWebRequest来异步下载网页,但它明显慢得多:我的吞吐量平均约为每秒50个页面(也在亚马逊的EC2上测试),使用相同的设置:1024个HttpWebRequest池和128个"服务"线程。当然,提供HTTP协议支持将占用更多的处理能力和内存。我希望亚马逊的超大EC2服务器不会受到处理能力/内存的限制,而只受到网络带宽的限制(到目前为止一直是这样)。

我使用的机器的一个例子是亚马逊的高cpu超大实例:

  • 7gb内存
  • 20个EC2计算单元(8个虚拟核,每个2.5个EC2计算单元)
  • 1690gb实例存储
  • 64位平台
  • I/O性能:高
  • API名称:c1.xlarge

我可以写我自己的HTTP处理符合HTTP协议,但它将节省我的工作,痛苦和痛苦,如果有一个现成的解决方案,是快速和强大的。

我至少需要以下功能:

  • 创建一个HTTP HEAD/GET(或者POST)请求
  • 解析二进制流的HTTP响应
  • 支持cookie
  • LGP许可证(LGPL)

有人知道这样的解吗?

使用异步套接字客户端的原始HTTP解析

我不知道HttpWebRequest内部是如何与插座一起工作的。打开/关闭套接字可能会对性能造成很大影响。WebClient使用keep-alive,可能工作得更好。

编辑:我在谷歌上搜索了一下,我不会接受这个答案。WebClient似乎是一个围绕HttpWebRequest/Response的包装:http://www.codeproject.com/Articles/156610/WP7-WebClient-vs-HttpWebRequest.aspx?msg=3775084

更新

既然您已经开始使用套接字,我将坚持使用它们。请随意从我的webserver项目中获取内容:http://webserver.codeplex.com

我的解析器:

http://webserver.codeplex.com/SourceControl/changeset/view/56552 671689