4

commons-httpclientを使用してクエリをWebサーバーに送信します。Webサーバーが接続を閉じることはありませんが、接続コンテキストに関連する小さなメモリリークがあります。

したがって、持続的接続を時々閉じたいのですが(たとえば、すべてのXクエリ)、これを行う方法が見つかりませんでした。MultiThreadedHTTPConnectionManagerを使用します

MultiThreadedHTTPConnectionManager.closeIdleConnections(very_small_delay)を使用することもできますが、それはあまり信頼できません。Javaコードに多くの作業が必要な場合は、空き接続を待機している他のスレッドが常に存在するため、接続がアイドル状態にならない可能性があります。

ありがとう、

4

4 に答える 4

2

1つのメソッド、たとえばGETを実行した後、応答されたHttpStatus番号を読み取って、method.releaseConnection()を呼び出す必要があるかどうかを判断できます。

または、閉じたい接続がわかっている場合は、試してみてください

MultiThreadedHTTPConnectionManager
void    releaseConnection(HttpConnection conn) 

さて、私はあなたがあなたが接続を「殺したい」という何らかの理由があると思いました。手元で閉じたい接続、HttpConnectionオブジェクトがあると仮定します。この方法は役に立ちますか?

HttpConnection
public void close()

    Closes the socket and streams. 
于 2010-02-04T13:04:55.983 に答える
1

呼んでいmethod.releaseConnection()ますか?

http://hc.apache.org/httpclient-3.x/threading.html#Connection_Release

于 2010-02-04T12:55:18.517 に答える
0

使用する余裕はありますSimpleHttpConnectionManager(boolean alwaysClose)か?

httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))
于 2012-11-28T15:07:46.730 に答える
0

私がreleaseConnections()まだ使用しているとき、CLOSE_WAIT状態で接続があります。closeIdleConnections(0)後に追加しても大丈夫releaseConnectionsですか?

これは、接続が他のクライアントによって使用されるためにプールに送り返されても、閉じられたり解放されたりしない場合でも、それcloseIdleConnectionsを閉じることを意味しますか?

于 2015-02-16T06:57:11.987 に答える