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