2016-07-04 1 views
3

다음은,이 100 밀리 초 시간 제한한다 setSocketTimeout 값에 따라 내 코드RequestConfig (아파치 HTTP 비동기 클라이언트 4.1.2)에 소켓 제한 시간 미만의 1000 밀리 초를 설정할 수 없습니다

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


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

     httpClient.start(); 

이지만 복용 1000ms에서 타임 아웃. setSocketTimeout은 1000ms보다 큰 모든 값을 인식합니다.

+0

읽기 타임 아웃이나 연결 시간 초과의 경우 너무 짧습니다. – EJP

+0

@EJP 1000ms는 소켓 시간 초과에 허용되는 최소값 인 것 같습니다. 1000ms 미만의 값은 1000. –

+0

으로 설정됩니다. Java가 아닙니다. – EJP

답변

4

이 동작은 의도적입니다. I/O 선택기 스레드는 정기적으로 기존 I/O 세션을 반복하고 I/O 비활성시에는 소켓 시간 초과 이벤트를 트리거해야합니다. 이 작업은 특히 동시 세션 수가 늘어남에 따라 매우 비쌉니다. 기본적으로 I/O 선택 간격은 1000ms로 설정되어 있으므로 기본적으로 소켓 제한 시간은 1 초입니다. 선택 간격을 줄이고 I/O 선택기 스레드를 더 자주 CPU 사용률을 높이면서 세션 반복을 반복 할 수 있습니다. 1ms 간격으로 선택하면 i/o 선택기 스레드가 통화 중 루프에서 효과적으로 실행됩니다.

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