commons-httpclient和httpclient有什么关系?它们都来自于Apache。

37
这两个库之间的任何关系或差异。
2个回答

54

Commons HttpClient 是一个旧项目,产生了 HttpClient 3.1。该项目已被更大的Apache HttpComponents项目吸收,后者产生了 HttpClient 4.x

这可能会让人感到困惑并带有一些政治色彩,但旧的 Commons HttpClient 库现在已经被弃用。


1
Commons HttpClient 3.x的弃用与政治无关。事实上,没有人愿意维护和处理那些可怕的3.x核心类。 - ok2c
@oleg:好的,没问题 :) 我只是在4.x开发过程早期浏览邮件列表时感觉有点政治化。 - skaffman
将毕业项目(Graduation)转化为顶层项目(TLP),这在很大程度上是由ASF决定解散雅加达项目驱动的,确实具有政治意义。但关于2.x/3.x API是死路一事的决策则没有任何政治考量。对于曾经接触过2.x和3.x核心类代码的人来说,这基本上是显而易见的。 - ok2c
我对httpclient3.x和httpclient4.x的结果感到惊讶[来源https://www.atlassian.com/blog/archives/http-client-performance-io]。如果这是真的,那么为什么4.x的性能比3.x慢,他们为什么没有花心思来提高性能呢? - Ravi
如果有其他基准测试链接或者不同意这个链接,请确认:[https://www.atlassian.com/blog/archives/http-client-performance-io] - Ravi

15

这两个库之间有任何区别吗?

有的。它们非常不同。首先,包名称不同,而且4.x API比3.x API更加丰富。

首先,4.x HttpClient API基于旨在支持HTTP客户端和服务器端的核心库。核心库旨在支持阻塞I/O和事件驱动I/O,并且有一个AsyncHttpClient API用于支持后者。该框架还提供了很多关于cookie管理、连接管理、客户端身份验证、代理路由、资源处理和流处理等方面的功能。

可悲的是,这意味着编写用于使用HttpClient 3.x的代码需要进行重大改写才能使用HttpClient 4.x。我想这就是@skaffman所提到的混乱和政治的根源。

但对我来说,最重要的是,如果您正在开发新项目,则应该使用HttpClient 4.x。


2
我更喜欢3.x API。我觉得4.x API很混乱和复杂,并且需要大量的配置才能完成最简单的事情。 - skaffman
2
@skaffman。HttpClient被广泛应用于各种不同的应用程序中,这些应用程序具有不同的、经常相互冲突的要求:网络爬虫、HTTP负载工具、Web应用程序测试工具、Web服务传输、HTTP代理、网关等。创建一个适合所有这些应用领域的通用API并同时简单灵活是非常困难的。在4.x API开发过程中,灵活性、模块化和性能往往优先考虑,而简单性和与3.x代码行的兼容性则不太重要。 - ok2c
1
@oleg:当然……我并不是针对 4.x API 抱怨,只是对于我使用它的目的来说,3.1 更简单。 - skaffman
@skaffman:我会坚称,HC 3.1所能做的_一切_,HC 4.1都可以做得更好。不过,简单性是主观的,所以争论这个没有意义。 - ok2c
1
@KiranMN - “它似乎更加流畅”几乎不是性能客观评估的标准。 - Stephen C
显示剩余2条评论

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