2009-08-20 16 views
1

this documentに見られるように、URLConnectionを使用する場合、javaでTCP接続プーリングが機能する前に、いくつかの前提条件が満たされている必要があります。接続がプールされているかどうかをどのように判断できますか?このためにSun jdkで検査できるオブジェクトはありますか?java接続プーリングがURLConnectionで機能しているかどうかを確認するにはどうすればよいですか?

答えて

1

実際に接続プーリングではなく、このドキュメントで説明するHTTPキープアライブメカニズムです。何らかの方法でネットワークトラフィックを検査できる場合、これを検出する簡単な方法は要求を調べることです。 HTTP/1.1を使用していて、 "Connection:close"が存在しないか、HTTP/1.0を使用していて、 "Connection:Keep-Alive"が表示されている場合は、

それ以外は実装の詳細です。デバッガを使用して実装の内部状態を調べ、キープ・アライブを有効にするフィールド・セットがあるかどうかを確認できます。あなたはこれのための情報源を見る必要があります。

また、あなたのドキュメントには、System.getProperty( "http.keepAlive")があります。それがヌルか「真」の場合、キープアライブが有効になっているようです。日JDK 5に含まれてSunのHTTPプロトコルハンドラの

1

、あなたはクラスsun.net.www.http.HttpClientを調べることができます。メンバKeepAliveCache kacには固定接続が保持されます。接続がHashTableにある場合は、再利用されます。

使用パターンによっては、HTTPハンドラでのキープアライブサポートが問題になることがあります。接続がキャッシュに残っていると、状態の変化に応答するスレッドがないため、接続が古くなってしまいます。再利用するとIOExceptionが発生することがあります。したがって、通常はキープアライブを無効にします。

あなたが本当にプールされた接続が必要な場合は、より良いオプションは、プールされたマルチスレッド接続マネージャではApache HttpClientをです。

関連する問題