首先,我不打算在这里开始一场火焰战争。我非常了解Jersey,但很少使用httpclient。
jersey-client和Apache的httpclient之间的主要区别是什么?哪个区域比另一个好?在某处有一个很好的比较图表吗?对于较大的文件(比如2048 MB),哪一个表现更好?
非常感谢您的评论!
答案 0 :(得分:78)
这两件事可能不应该直接比较。 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 Client后端示例的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的用法。这是泽西岛的一个关键整合抽象,可以整合和利用各种后端。第一个例子深入了解URLConnectionClientHandler
。
谈到性能和功能,将Apache Http Client与Jersey进行比较是没有意义的。人们可能想在这里比较不同的泽西后端,因为泽西岛本身只是一个包装API。我想根据自己的经验强调HttpUrlConnection和Apache Http Client之间的一些关键差异:
<强> HttpURLConnection类强>
HttpUrlConnection
的实施很难维护和扩展。Apache Http客户端
HttpUrlConnection
有些相似。版本4.1包含许多性能增强,并且执行方式比对应HttpUrlConnection
也有一个内部池,但是没有工具可以自定义什么或何时池,没有监视工具来检查池状态。请注意,如果您有适当的com.sun.jersey.api.client.ClientHandler
实施,还可以使用其他后端(例如,对于非阻止客户端)。