まず第一に、私はここで炎上戦争を始めようとしているわけではありません。私はJerseyを十分に知っていますが、httpclientをほとんど使用したことがありません.
jersey-client と Apache の httpclient の主な違いは何ですか? ある分野が他の分野よりも優れているのはどの分野ですか? どこかに良い比較表はありませんか?より大きなファイル (たとえば 2048 MB) では、どちらがより優れたパフォーマンスを発揮しますか?
コメントありがとうございます!
まず第一に、私はここで炎上戦争を始めようとしているわけではありません。私はJerseyを十分に知っていますが、httpclientをほとんど使用したことがありません.
jersey-client と Apache の httpclient の主な違いは何ですか? ある分野が他の分野よりも優れているのはどの分野ですか? どこかに良い比較表はありませんか?より大きなファイル (たとえば 2048 MB) では、どちらがより優れたパフォーマンスを発揮しますか?
コメントありがとうございます!
この 2 つのことは、おそらく直接比較すべきではありません。Jersey は REST クライアントであり、完全な JAX-RS 実装、きちんとした流暢な API、強力なフィルター スタックを備えています。Apache Http Client は HTTP クライアントであり、タイムアウト、複雑なプロキシ ルート、接続ポーリングなどの低レベルの詳細を管理するのに最適です。それらは、プロトコル スタックのさまざまなレベルで動作します。Jersey を使用している場合、常に何らかの HTTP クライアント バックエンドが関与します。バックエンドが明示的に指定されていない場合、Jersey はHttpUrlConnection
デフォルトのバックエンドとして使用します。
Jersey と HttpUrlConnection バックエンドの例:
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自体はラッピングAPIにすぎないため、ここで異なるJerseyバックエンドを比較したい場合があります。私自身の経験に基づいて、HttpUrlConnection と Apache Http Client の主な違いをいくつか強調したいと思います。
HttpUrl接続
HttpUrlConnection
に基づく実装は、保守と拡張が困難です。アパッチ HTTP クライアント
HttpUrlConnection
. バージョン 4.1 には多くのパフォーマンス強化が含まれており、対応するものよりもはるかに優れたパフォーマンスを発揮しますHttpUrlConnection
内部プーリングもありますが、何をいつプールするかをカスタマイズするツールはなく、プールの状態を確認するための監視機能もありません。com.sun.jersey.api.client.ClientHandler
適切な実装がある場合は、Jersey で他のバックエンド (非ブロッキング クライアントなど) を使用することもできることに注意してください。