1

そのため、私はマルチスレッドプログラムを実行しており、APIと、スクレイプしたいいくつかのWebページを大量に呼び出します。まれに、httpgetがひどく失敗し、プログラムが「フリーズ」する場合があります(スレッドが終了しない、スレッドプールが閉じない、メインが終了しないなど)。

作成しているhttp接続にタイムアウトを設定する必要があります。DefaultHttpClientを使用しています

DefaultHttpClient httpclient = new DefaultHttpClient();

そして、私はパラメータを設定していません。

誰かが私がこれらをタイムアウトするのを手伝ってくれるか、少なくともタイムアウトの処理を探すべき場所を教えてもらえますか?(Apacheには、良い例がないように見える素晴らしいライブラリがあるようです)

4

3 に答える 3

6

以下に示すようなものを試してください。

int connectiontimeout = 1000; //1 second
int sockettimeout = 1000;

HttpParams httpparameters = new BasicHttpParams();

HttpConnectionParams.setConnectionTimeout(httpparameters, connectiontimeout);
HttpConnectionParams.setSoTimeout(httpparameters, sockettimeout);

HttpClient httpclient = new DefaultHttpClient(httpparameters);
于 2012-10-16T13:56:01.210 に答える
1

HttpConnectionParamsが必要です。接続タイムアウトとソケットタイムアウト(接続ではなく読み取りに関連する)を区別する必要がある可能性があります

SO_TIMEOUTデフォルトのソケットタイムアウト(SO_TIMEOUT)をミリ秒単位で定義します。これは、データを待機するためのタイムアウトです。

CONNECTION_TIMEOUT接続が確立されるまでのタイムアウトを決定します。

詳細については、こちらをご覧ください。これらのオプション。

于 2012-10-16T13:50:03.020 に答える
0

2つのうちの1つ、できれば最初のものを使用することをお勧めします。

 HttpConnectionParams.setConnectionTimeout(int) 

 HttpConnection.setConnectionTimeout(int)

なので:

 HttpConnectionParams.setConnectionTimeout( httpParams, 5000 );
于 2012-10-16T13:49:49.307 に答える