【问题标题】:Asynchronous Web Requests in Java?Java中的异步Web请求?
【发布时间】:2010-12-08 04:27:47
【问题描述】:

我正在用 Java 编写一个简单的网络爬虫。我希望它能够每秒下载尽可能多的页面。是否有一个包可以使在 Java 中轻松执行异步 HTTP Web 请求?我已经使用了 HttpURLConnection ,但那是阻塞的。我也知道 Apache 的 HTTPCore NIO 中有一些东西,但我正在寻找更轻量级的东西。我尝试使用这个包,并且在多个线程上使用 HttpURLConnection 获得了更好的吞吐量。

【问题讨论】:

  • 为什么不尝试在多线程中使用 HttpURLConnection 呢?
  • 这个我试过了,看我上面帖子的最后一句:)

标签: java multithreading web-scraping httpurlconnection


【解决方案1】:

一般而言,只要线程数低于 1000,数据密集型协议在使用经典阻塞 I/O 的原始吞吐量方面往往比 NIO 表现更好。至少客户端 HTTP 肯定是这种情况基于 Apache HttpClient [1] 使用的(可能不完美且可能有偏见的)HTTP 基准测试

只要线程数适中 (好多

如果你绝对确定你想要一个基于 NIO 的 HTTP 客户端,我可以推荐 Jetty HTTP 客户端,我个人认为它是目前最好的异步 HTTP 客户端。

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

【讨论】:

    【解决方案2】:

    虽然该用户问的不是同一个问题,但您可能会发现他的问题的答案很有用:Asynchronous HTTP Client for Java

    附带说明,如果您要“每秒下载尽可能多的页面”,您应该记住,爬虫可能会无意中将薄弱的服务器拖到停止状态。您可能应该阅读“robots.txt”以及解释此文件的适当方式,然后再将您的创作用于您自己的个人测试设置之外的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多