Время ожидания сокета Apache HttpClient 3.1

Я выполняю запросы веб-сервиса с помощью Apache HttpClient 3.1 следующим образом:

private MultiThreadedHttpConnectionManager cm = null;
private HttpClient client = null;

// Setting up connection manager during init process
cm = new MultiThreadedHttpConnectionManager();
int connectionTimeout = 12000; // it actually comes from config file, but this is the current value
cm.getParams().setConnectionTimeout(connectionTimeout);
cm.getParams().setTcpNoDelay(true);
client = new HttpClient(cm);

// method is prepared with request data earlier
int socketTimeout = 30000; // it actually comes from config file, but this is the current value
method.getParams().setSoTimeout(socketTimeout);
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(0, false));

logger.info("Starting request");
int statusCode = client.executeMethod(method);
logger.info("StatusCode = " + statusCode);
String response = method.getResponseBodyAsString();
logger.info("Response = " + response);

Отметки времени в файле журнала следующие:

2017-05-02 08:50:03,881 Starting request
2017-05-02 08:50:16,680 StatusCode = 200
2017-05-02 08:50:46,708 java.net.SocketTimeoutException

Таким образом, несмотря на то, что время ожидания соединения установлено на 12 секунд, вызов executeMethod занял почти 13 секунд. Я запутался в этом, так как документация здесь не ясна: правильно ли сказать, что executeMethod и getResponseBodyAsString используют время ожидания сокета отдельно? Итак, в этом случае время ожидания сокета составляет 30 секунд, поэтому теоретически выполнение может занять 60 секунд?


person Gábor Major    schedule 02.05.2017    source источник


Ответы (1)


Время ожидания соединения не имеет значения. Вы получили код состояния 200, что означает, что подключение прошло успешно, и вы прочитали хотя бы некоторые заголовки. Тайм-аут чтения установлен на 30 секунд, что означает, что сервер ничего не отправил в течение 30 секунд.

person user207421    schedule 02.05.2017