[英]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.