首先,我不是要在这里发动 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);
Jersey与Apache Http Client后端示例:
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一起使用。