2

接続タイムアウトに問題がapache http client (4.2.1)あります。ホストが存在するが時間内に応答しない場合、接続はタイムアウトによって閉じられます (すべてが期待どおりです)。ただし、そのようなホストがない場合、クライアントは予想よりも長く待機し続けます (約 12 秒)構成で指定された 5 の代わりに)。おそらく特定のネットワークの問題が原因で、最終的にこれにより NoRouteToHostException が発生します (別のネットワークでこれを再現しようとしたときに、予想どおり、5 秒待機した後にソケット読み取りタイムアウト例外が発生しました)。次のタイムアウト設定を使用しています。

  • http.socket.timeout = 5 秒
  • http.connection.timeout = 5 秒

どんな考えでも大歓迎です。

アップデート

誰かが同じ問題を抱えている場合、おそらくクライアントによって実行される接続の再試行が原因です。問題が解決したら、この投稿を更新します

Update2

最終的に私は問題を解決することができました。この問題は、要求再試行ハンドラーが明示的に指定されていない場合、AbstractHttpClient (DefaultHttpClient の親) によって使用される DefaultHttpRequestRetryHandler によって実行される接続の再試行によって引き起こされました。したがって、それを取り除きたい場合は、リクエストの再試行ハンドラーをより少ない回数の再試行で指定するだけです

4

1 に答える 1

1

Eventually I've been able to fix the issue. The problem was caused by the connection retries performed by DefaultHttpRequestRetryHandler, used by AbstractHttpClient (that is the parent of DefaultHttpClient), if there is no request retry handler specified explicitly. So, if you want to get rid of it, just specify the request retry handler with smaller number of retries

于 2014-08-11T16:59:56.897 に答える