首先,我不是想在这里挑起一场战争。我对Jersey非常了解,但很少使用httpclient。
jersey-client和Apache的httpclient之间的主要区别是什么?一个在哪些方面比另一个更好?有没有比较好的图表?对于较大的文件(比如2048 MB),哪一个性能更好?
非常感谢你的评论!
发布于 2013-10-23 02:22:23
这两件事可能不应该直接比较。Jersey是一个REST客户端,具有完整的JAX-RS实现、整洁流畅的API和强大的过滤器堆栈。Apache Http客户端是一个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);Jersey with Apache Http客户端后端示例:
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客户端之间的一些关键区别:
HttpUrlConnection
HttpUrlConnection-based实现很难维护和扩展。Apache Http客户端
HttpUrlConnection。版本4.1包含大量的性能增强,并且在管理连接和数据读取方面比其对应的处理。示例:重定向策略、重试策略、自定义cookie存储、请求/响应拦截器、etc.
HttpUrlConnection还具有内部池化功能,但您没有工具来自定义池化的内容或时间,也没有监视工具来检查池state.请记住,如果您有适当的com.sun.jersey.api.client.ClientHandler实现,也可以将其他后端(例如,用于非阻塞客户端)用于Jersey。
https://stackoverflow.com/questions/18570206
复制相似问题