2016-10-26 3 views
0

Apache HttpClient позволяет настроить два таймаута: ConnectionTimeout и SoTimeoutApache HttpClient - ConnectionTimeout и SoTimeout

Это как люди, как правило, создают общую цель HttpClient экземпляра:

PoolingClientConnectionManager conman = new PoolingClientConnectionManager(); 
conman.setMaxTotal(200); 
conman.setDefaultMaxPerRoute(100); 
HttpClient httpClient = new DefaultHttpClient(conman); 
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 1000); 
HttpConnectionParams.setSoTimeout(httpClient.getParams(), 1000); 

ConnectionTimeout Параметр сложный, он охватывает два сценария:

  • HttpClient может бросить org.apache.http.conn.ConnectTimeoutException: Connect to example.com timed out - , если он был не в состоянии установить базовую соединение TCP

  • Также он может бросить org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool - , когда пул соединений полон, и это было не в состоянии получить новое соединение с бассейном в течение этого периода времени

у меня есть два вопроса вокруг этого:

1) Есть ли причина, по которой эти два фактических разных тайм-аута были объединены под одним параметром ConnectionTimeout.
Там нет никакого способа, например, ждать доступное соединение с бассейна для 10сок, но держать сокет-соединение-таймаут 1sec

2) Что рекомендуемое значение для ConnectionTimeOut и SoTimeout для общего назначения сценария?

ответ

0
  1. Потому что именно так они его и разработали. Зная, почему это не изменит вашу жизнь.
  2. 10s достаточно для таймаута соединения. Значение тайм-аута чтения полностью зависит от ожидаемого времени обслуживания. Вы должны установить его достаточно высоким, чтобы можно было использовать всплески нагрузки, но достаточно низкие, чтобы быть полезными. Вы можете установить его в два раза по сравнению с ожидаемым сроком службы или двумя или тремя стандартными отклонениями над ним, если у вас есть такие статистические данные.
+0

1. Удовлетворение моего собственного любопытства изменит мою жизнь :), особенно если есть реальная причина :) –

+0

2. 10s, вероятно, много .. Я понимаю, что «сценарий общего назначения» очень абстрактный, но в любом случае ... –