以下是我的代码

       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 ms的值。

最佳答案

此行为是故意的。 I/O选择器线程需要定期对现有I/O session 进行迭代,并在I/O不 Activity 的情况下触发套接字超时事件。尤其是随着并发 session 数的增加,此操作可能会变得非常昂贵。默认情况下,I/O选择间隔设置为1000 ms,因此默认情况下套接字超时的粒度为1秒。可以减少选择间隔,并使I/O选择器线程更频繁地在 session 上进行迭代,但以提高CPU利用率为代价。选择间隔为1毫秒,I/O选择器线程将有效地在繁忙循环中运行。

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

10-04 11:26