[英]How can I use jersey-client with Apache httpclient underneath?
[英]How do Jersey-client and Apache HTTP Client compare?
首先,我不是想在这里开始一场火焰战争。 我非常了解泽西岛,但很少使用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 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的用法。 这是泽西岛的一个关键整合抽象,可以整合和利用各种后端。 第一个例子深入使用URLConnectionClientHandler
。
谈到性能和功能,将Apache Http Client与Jersey进行比较毫无意义。 人们可能想在这里比较不同的泽西后端,因为泽西岛本身只是一个包装API。 我想根据自己的经验强调HttpUrlConnection和Apache Http Client之间的一些关键差异:
HttpURLConnection的
HttpUrlConnection
的实现很难维护和扩展。 Apache Http客户端
HttpUrlConnection
。 版本4.1包含许多性能增强,并且执行方式比对应版本更好 HttpUrlConnection
还有一个内部池,但是你没有工具可以自定义什么或什么时候池,没有监控工具来检查池状态。 请记住,如果您有适当的com.sun.jersey.api.client.ClientHandler
实现,也可以使用Jersey的其他后端(例如,对于非阻塞客户端)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.