我正在Java中编写一个简单的网络爬虫,希望它能够尽可能地下载更多的网页。有没有一款Java包可以轻松实现异步HTTP网络请求?我曾使用过HttpURLConnection,但它是阻塞式的。我知道Apache的HTTPCore NIO中有一些相关的内容,但我正在寻找一些更轻量级的东西。我尝试了使用这个包,在多个线程上使用HttpURLConnection时,获得了更好的吞吐量。
我正在Java中编写一个简单的网络爬虫,希望它能够尽可能地下载更多的网页。有没有一款Java包可以轻松实现异步HTTP网络请求?我曾使用过HttpURLConnection,但它是阻塞式的。我知道Apache的HTTPCore NIO中有一些相关的内容,但我正在寻找一些更轻量级的东西。我尝试了使用这个包,在多个线程上使用HttpURLConnection时,获得了更好的吞吐量。
如果线程数适中(<250),使用带有线程的阻塞式HTTP客户端可能会更好。
如果您确实确定要使用基于NIO的HTTP客户端,我可以推荐Jetty HTTP客户端,我个人认为它是目前最好的异步HTTP客户端。
[1] http://wiki.apache.org/HttpComponents/HttpClient3vsHttpClient4vsHttpCore
虽然这个用户没有问同样的问题,但你可能会发现他的问题的答案有用:Java的异步HTTP客户端
另外,如果你要“尽可能快地下载尽可能多的页面”,你应该记住,网络爬虫可能会无意中使弱服务器崩溃。在你将其释放到除了你自己的个人测试设置之外的任何地方之前,你应该仔细阅读“robots.txt”和正确解释此文件的方法。