5

netstat -anp | から grep I 2 つの異なる時点で、HttpClient が接続を再利用していないことがわかります。次のような異なるURLを使用して、毎回同じホストに接続します

HttpClient が myhost.com への同じ接続を毎回再利用しないのはなぜですか?

HttpClient に渡すプールを初期化するための次のコードがあります...

PoolingClientConnectionManager mgr = new PoolingClientConnectionManager();
mgr.setDefaultMaxPerRoute(30);
mgr.setMaxTotal(30);

私は彼らが HttpRoute を使用していて、 HttpRoute がホスト名とスキーマ (https/http) だけで等しいはずなので奇妙に思える equals に localAddress を持っているのを見ます。それはそれと何か関係がありますか?これはバグですか?毎回 https ソケットを再確立する必要があるため、パフォーマンスが非常に悪いです!!!!!

4

1 に答える 1

13

アプリケーションによって確立された SSL 接続がステートフルである可能性がかなり高いと思います。つまり、サーバーはクライアントにプライベート証明書で認証するように要求し、それらをセキュリティ コンテキスト固有にしました。HttpClient はそれを検出し、これらの接続が異なるセキュリティ コンテキストを持つ呼び出し元にリースされるのを防ぎます。事実上、HttpClient は、間違ったユーザーに永続的な SSL 接続をリースする危険を冒すのではなく、リクエストごとに新しい接続を強制することで安全にプレイしています。

ここでできることは2つ

詳細については、HttpClient チュートリアルのこのセクションを参照してください。

于 2012-10-24T12:22:03.800 に答える