Невозможно установить время ожидания сокета менее 1000 миллисекунд в RequestConfig (асинхронный клиент Apache HTTP 4.1.2)

Ниже приведен мой код

       RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(100)
                .setConnectTimeout(100)
                .setConnectionRequestTimeout(100).build();


        CloseableHttpAsyncClient httpClient = HttpAsyncClients.custom()
                .setDefaultRequestConfig(requestConfig)
                .build();

        httpClient.start();

Согласно значению setSocketTimeout, тайм-аут должен составлять 100 мс, но для тайм-аута требуется 1000 мс. Однако setSocketTimeout учитывает все значения, превышающие 1000 мс.


person Rahul Shandilya    schedule 04.07.2016    source источник
comment
100 мс слишком мало для тайм-аута чтения или тайм-аута соединения.   -  person user207421    schedule 04.07.2016
comment
@EJP 1000 мс кажется минимальным значением, допустимым для тайм-аута сокета. Любое значение менее 1000 мс устанавливается как 1000.   -  person Rahul Shandilya    schedule 04.07.2016
comment
По этим рамкам. Не по Яве.   -  person user207421    schedule 08.07.2016


Ответы (1)


Такое поведение является преднамеренным. Потоки селектора ввода-вывода должны регулярно перебирать существующие сеансы ввода-вывода и запускать событие тайм-аута сокета в случае бездействия ввода-вывода. Эта операция может стать очень дорогой, особенно по мере роста количества одновременных сеансов. По умолчанию интервал выбора ввода-вывода установлен на 1000 мс, поэтому точность тайм-аута сокета по умолчанию составляет 1 секунду. Можно уменьшить интервал выбора и заставить потоки селектора ввода-вывода чаще повторять сеансы за счет большей загрузки ЦП. При выборе интервала 1 мс потоки селектора ввода-вывода будут эффективно работать в цикле занятости.

IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
        .setSelectInterval(100)
        .setSoTimeout(100)
        .setConnectTimeout(100)
        .build();
CloseableHttpAsyncClient httpClient = HttpAsyncClients.custom()
        .setDefaultIOReactorConfig(ioReactorConfig)
        .build();
person ok2c    schedule 05.07.2016