Java中的异步Web请求?

3

我正在Java中编写一个简单的网络爬虫,希望它能够尽可能地下载更多的网页。有没有一款Java包可以轻松实现异步HTTP网络请求?我曾使用过HttpURLConnection,但它是阻塞式的。我知道Apache的HTTPCore NIO中有一些相关的内容,但我正在寻找一些更轻量级的东西。我尝试了使用这个包,在多个线程上使用HttpURLConnection时,获得了更好的吞吐量。


为什么不尝试在多个线程中使用HttpURLConnection? - craftsman
我已经尝试过了,可以看看我上面帖子的最后一句话 :) - Kam Sheffield
2个回答

6
一般来说,对于原始吞吐量而言,数据密集型协议在使用传统的阻塞I/O时比NIO表现更好,只要线程数低于1000。至少在Apache HttpClient所使用的(可能不完美且可能有偏见的)基于客户端HTTP的基准测试中是这样的。

如果线程数适中(<250),使用带有线程的阻塞式HTTP客户端可能会更好。

如果您确实确定要使用基于NIO的HTTP客户端,我可以推荐Jetty HTTP客户端,我个人认为它是目前最好的异步HTTP客户端。

[1] http://wiki.apache.org/HttpComponents/HttpClient3vsHttpClient4vsHttpCore


3

虽然这个用户没有问同样的问题,但你可能会发现他的问题的答案有用:Java的异步HTTP客户端

另外,如果你要“尽可能快地下载尽可能多的页面”,你应该记住,网络爬虫可能会无意中使弱服务器崩溃。在你将其释放到除了你自己的个人测试设置之外的任何地方之前,你应该仔细阅读“robots.txt”和正确解释此文件的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接