首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jersey-client和Apache HTTP Client有何不同?

Jersey-client和Apache HTTP Client有何不同?
EN

Stack Overflow用户
提问于 2013-09-02 17:49:15
回答 1查看 34.7K关注 0票数 55

首先,我不是想在这里挑起一场战争。我对Jersey非常了解,但很少使用httpclient。

jersey-client和Apache的httpclient之间的主要区别是什么?一个在哪些方面比另一个更好?有没有比较好的图表?对于较大的文件(比如2048 MB),哪一个性能更好?

非常感谢你的评论!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-23 02:22:23

这两件事可能不应该直接比较。Jersey是一个REST客户端,具有完整的JAX-RS实现、整洁流畅的API和强大的过滤器堆栈。Apache Http客户端是一个HTTP客户端,在管理诸如超时、复杂的代理路由和连接轮询等低层细节方面非常完美。它们作用于协议栈的不同级别。当你使用Jersey时,总会涉及到一些HTTP客户端后端。如果没有明确的后端,Jersey将使用HttpUrlConnection作为默认后端。

带有HttpUrlConnection后端的泽西示例:

代码语言:javascript
复制
Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
                                     .get(ClientResponse.class);

Jersey with Apache Http客户端后端示例:

代码语言:javascript
复制
HttpClient apacheClient = HttpClientBuilder.create().build();
Client client = new Client(new ApacheHttpClient4Handler(apacheClient,
                                                        new BasicCookieStore(),
                                                        true));
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
                                     .get(ClientResponse.class);

请注意上一个示例中Handler的用法。这是Jersey整合和利用各种后端的关键集成抽象。第一个示例在幕后使用URLConnectionClientHandler

说到性能和功能,比较Apache Http Client和Jersey是没有什么意义的。人们可能想在这里比较不同的Jersey后端,因为Jersey本身只是一个包装API。根据我自己的经验,我想强调一下HttpUrlConnection和Apache Http客户端之间的一些关键区别:

HttpUrlConnection

  • 不需要外部依赖项。这在嵌入式或移动platforms.
  • Extremely上可能非常有价值文档良好的everywhere
  • Has设计不佳的API。HttpUrlConnection-based实现很难维护和扩展。
  • 的许多功能都是通过JVM属性配置的,其中一些在运行时可能是不可重新配置的。
  • 在某些情况下处理超时是无望的。你可能最终为不同的超时设置了10个不同的JVM属性,但仍然会让你的连接永远挂在某个circumstances.
  • Since中,这是一个用于安卓的recommended http客户端API。

Apache Http客户端

  • 对于3.X版本,它的性能有点类似于HttpUrlConnection。版本4.1包含大量的性能增强,并且在管理连接和数据读取方面比其对应的
  • 要好得多。timeouts
  • It's设计遵循Open/Closed Principle,因此您可以使用自己的实现自定义几乎任何部分的

处理。示例:重定向策略、重试策略、自定义cookie存储、请求/响应拦截器、etc.

  • Provides富代理支持以及针对复杂多代理路径的可定制路由构建器
  • 具有开箱即用的每路由连接池。如果使用SSL/TLS,尤其是涉及硬件PKCS#11令牌时,这可能会带来良好的性能优势。HttpUrlConnection还具有内部池化功能,但您没有工具来自定义池化的内容或时间,也没有监视工具来检查池state.
  • Features detailed logging

请记住,如果您有适当的com.sun.jersey.api.client.ClientHandler实现,也可以将其他后端(例如,用于非阻塞客户端)用于Jersey。

票数 90
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18570206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档