3つ(コメントとしてマークされている)の違いは何ですか:
MultiThreadedHttpConnectionManager connManag = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams managParams = connManag.getParams();
managParams.setConnectionTimeout(connectiontimeout); // 1
managParams.setSoTimeout(sotimeout); //2
HttpMethodBase baseMethod = null;
try {
HttpClient client = new HttpClient(connManag);
client.getParams().setParameter("http.connection-manager.timeout", poolTimeout); //3
baseMethod = new GetMethod(…);
int statusCode = client.executeMethod(…);
…
}
catch (ConnectTimeoutException cte ){
//Took too long to connect to remote Host
}
catch (SocketTimeoutException ste){
//Remote Host didn’t respond in time
}
catch (Exception se){
//Some other error occurred
}
finally {
if (baseMethod != null)
baseMethod.releaseConnection();
}
1. setConnectionTimeout
-接続が確立されるまでのタイムアウトを決定する場合。
2. setSoTimeout
-非アクティブ期間または2つの連続したパケット間の時間差を特定する場合、
次に、以下のものは何をしますか:
3. "http.connection-manager.timeout"
最下位レベルのHTTPはTCPソケットです。したがって、URLを要求して応答を取得すると、下位レベルで、リモートサーバーソケットへの接続を確立し、データを送信するクライアントソケットが作成されます応答を受け取ります。
setConnectionTimeout:クライアントはサーバーへの接続を試行します。これは、接続が確立されるまで、またはサーバーが接続要求に応答するまでの経過時間を示します。
setSoTimeout:接続の確立後、クライアントソケットは要求を送信した後、応答を待ちます。これは、サーバーが応答する前にクライアントがサーバーにリクエストを送信してからの経過時間です。これは、サーバーがクライアントに送信するHTTP Error 408
と同じではないことに注意してください。言い換えれば、接続が確立された後にクライアント側に到着する2つの連続したデータパケットの間の最大期間非アクティブです。
http.connection-manager.timeout:MultiThreadedHttpConnectionManager
はHTTP接続のプールを使用します。ホストごとに最大値と最小値が設定されています。特定のホストのすべての接続が最大値に達した場合、同じホストの新しい接続の要求は、既存の接続のいずれかが解放されるまで待機する必要があります。このパラメーターは、接続要求が行われてからHttpConnectionManager
が接続を返すまでの経過時間を示します。
詳細な説明は、Apache HTTPクライアントサイトの 接続管理ドキュメント で提供されています。
CoreConnectionPNames.SO_TIMEOUT = 'http.socket.timeout':は、ソケットタイムアウト(SO_TIMEOUT)をミリ秒単位で定義します。これは、データ待機のタイムアウトです。別の言い方をすれば、2つの連続したデータパケット間の最大期間非アクティブ)。タイムアウト値ゼロは、無限のタイムアウトとして解釈されます。このパラメーターには、Java.lang.Integer型の値が必要です。このパラメーターが設定されていない場合、読み取り操作はタイムアウトしません(無限タイムアウト)。
CoreConnectionPNames.CONNECTION_TIMEOUT = 'http.connection.timeout':は、接続が確立されるまでのタイムアウトをミリ秒単位で決定します。タイムアウト値ゼロは、無限のタイムアウトとして解釈されます。このパラメーターには、Java.lang.Integer型の値が必要です。このパラメーターが設定されていない場合、接続操作はタイムアウトしません(無限タイムアウト)。
接続マネージャーのタイムアウト(http.connection-manager.timeout)–接続マネージャー/プールからの接続を待機する時間
記録のためだけに
HttpParams httpParams = httpClient.getParams();
httpParams.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeout * 1000);
httpParams.setParameter(CoreConnectionPNames.SO_TIMEOUT, timeout * 1000);
別の方法です
HttpParams httpParams = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(httpParams, timeout * 1000);
HttpConnectionParams.setSoTimeout(httpParams, timeout * 1000);
簡単な言葉で: