gpt4 book ai didi

java - Jersey-client 和 Apache HTTP Client 如何比较?

转载 作者:IT老高 更新时间:2023-10-28 20:33:34 25 4
gpt4 key购买 nike

首先,我不想在这里发起一场激烈的 war 。我对 Jersey 非常了解,但几乎没有使用过 httpclient。

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

非常感谢您的评论!

最佳答案

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

带有 HttpUrlConnection 后端的 Jersey 示例:

Client client = Client.create();
WebResource webResource = client.resource("http://localhost:8080/path");
ClientResponse response = webResource.accept("application/json")
.get(ClientResponse.class);

带有 Apache Http 客户端后端的 Jersey 示例:

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 Client 之间的一些关键区别:

HttpUrlConnection

  • 不需要外部依赖项。这在嵌入式或移动平台上可能非常有值(value)。
  • 到处都有非常详细的记录
  • API 设计不佳。基于 HttpUrlConnection 的实现难以维护和扩展。
  • 许多功能是通过 JVM 属性配置的,其中一些在运行时可能无法重新配置。
  • 在某些情况下无法处理超时。您最终可能会为不同的超时设置 10 个不同的 JVM 属性,但在某些情况下仍然会导致连接永远挂起。
  • 因为 Gingerbread 是 recommended Android 的 http 客户端 API。

Apache Http 客户端

  • 对于 3.X 版本,它的性能有点类似于 HttpUrlConnection。 4.1 版包含许多性能增强功能,并且性能比它的对应版本更好
  • 非常擅长管理连接和数据读取超时
  • 其设计遵循 Open/Closed Principle ,因此您可以使用自己的实现自定义 HTTP 处理的几乎任何部分。示例:重定向策略、重试策略、自定义 cookie 存储、请求/响应拦截器等。
  • 通过可定制的路由构建器为复杂的多代理路径提供丰富的代理支持
  • 具有开箱即用的每个路由连接池。如果使用 SSL/TLS,这可能会带来良好的性能优势,尤其是涉及硬件 PKCS#11 token 。 HttpUrlConnection 也有一个内部池,但是您没有工具来自定义池的内容或时间,也没有监控设施来检查池状态。
  • 提供详细的日志记录

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

关于java - Jersey-client 和 Apache HTTP Client 如何比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18570206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com