以下是我的代码
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();