首先,我不想在这里发起一场激烈的战争。我非常了解泽西岛,但几乎没有使用过 httpclient。
jersey-client 和 Apache 的 httpclient 之间的主要区别是什么?在哪些方面一个比另一个更好?有没有好的对比图?对于较大的文件(比如 2048 MB),哪一个性能更好?
非常感谢您的评论!
首先,我不想在这里发起一场激烈的战争。我非常了解泽西岛,但几乎没有使用过 httpclient。
jersey-client 和 Apache 的 httpclient 之间的主要区别是什么?在哪些方面一个比另一个更好?有没有好的对比图?对于较大的文件(比如 2048 MB),哪一个性能更好?
非常感谢您的评论!
这两件事可能不应该直接比较。Jersey 是一个 REST 客户端,具有完整的 JAX-RS 实现、简洁流畅的 API 和强大的过滤器堆栈。Apache Http Client 是一个 HTTP 客户端,非常适合管理低级细节,如超时、复杂的代理路由和连接轮询。它们作用于协议栈的不同级别。当您使用 Jersey 时,总会涉及某种 HTTP 客户端后端。如果没有明确的后端,Jersey 将HttpUrlConnection
用作默认后端。
带有 HttpUrlConnection 后端示例的泽西岛:
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
HttpUrlConnection
基于-的实现难以维护和扩展。Apache Http 客户端
HttpUrlConnection
. 4.1 版包含许多性能增强功能,并且性能比它的对应版本更好HttpUrlConnection
也有一个内部池,但是您没有工具来自定义池的内容或时间,没有监控设施来检查池状态。com.sun.jersey.api.client.ClientHandler
请记住,如果您有适当的实现,也可以在 Jersey 中使用其他后端(例如,用于非阻塞客户端) 。