2016-12-22 2 views
0

Apache Common의 HTTPClient를 사용하여 HTTP 연결을 만들고 있습니다. 연결 유형이 POST이고 클라이언트가 연결에서 출력을 읽습니다. 그러나 연결 상태에 관계없이 언제든지 연결을 중단 할 수 있어야합니다. 이 일을하는 가장 좋은 방법은 무엇입니까? 시간 초과 기능이 내장되어 있습니까? 감사합니다.Apache HTTPClient 언제든지 종료

편집 : 그냥 내 질문을 명확히하기 :
연결을 끊을 때 사용자가 선택할 수있게하고 싶습니다. 즉 매개 변수 컬 유사한 기능에서
: CURLOPT_TIMEOUT 당신이 HttpClientBuilder를 사용하여 세션 객체의 인스턴스를 인스턴스화하고 https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html

답변

0

, 당신은 어떤 inturn이 개 매개 변수를 허용 빌더에 RequestConfig의 인스턴스를 전달할 수 있습니다.

SocketTimeout - 소켓 대기 시간 (SO_TIMEOUT)을 밀리 초 단위로 정의합니다. 밀리 초 단위로 데이터를 기다리는 시간 초과 또는 두 개의 연속적인 데이터 패킷 간의 최대 비활성 시간을 나타냅니다.

ConnectTimeout - 연결이 설정 될 때까지의 시간 제한을 밀리 초 단위로 결정합니다. 타임 아웃 값 0은 무한 타임 아웃으로 해석됩니다.

ConnectionRequestTimeout - 연결 관리자로부터 연결을 요청할 때 사용되는 시간 제한을 밀리 초 단위로 반환합니다. 타임 아웃 값 0은 무한 타임 아웃으로 해석됩니다.

당신이 찾고있는 것은 입니다. SocketTimeout입니다.

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT) 
       .setConnectionRequestTimeout(CONNECTION_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build(); 
httpClient = HttpClientBuilder.create().disableAutomaticRetries().setDefaultRequestConfig(requestConfig) 
       .setConnectionManager(poolingHttpClientConnectionManager).disableRedirectHandling().build(); 

ConnectionKeepAliveStrategy을 살펴볼 수 있습니다. "2.6 연결 유지 전략"절 참조

+0

안녕하세요, 귀하의 회신에 감사드립니다. 미안해, 내가 생각하기에 충분하지 않다. 소켓 시간 제한을 사용하여 솔루션을 시도했지만 연결을 중지하지는 않습니다. 기본적으로 나는 그 연결을 통해 일정한 데이터 스트림을 수신 할 것이지만 사용자가 지정한 시간 (예 : 10 초) 후에 데이터를자를 수 있기를 원합니다. – GreenApples53

+0

@ GreenApples53 그래, 나는 그 질문에 대해 오해했다. ConnectionKeepAliveStratergy가 도움이되는지 알 수 있습니까? 서버로부터 첫 번째 응답을 받으면 keep-alive timeout을 사용하여이를 처리 할 수 ​​있습니다. 그리고 응답이 수신되기 전에 이것을 달성하기 위해 소켓 타임 아웃을 사용할 수 있습니다.그래서 둘 다 섞을 필요가 있다고 생각합니다. –

+0

저는 현재 지정된 시간 후에 연결을 중단시키는 타이머 스레드를 생성하는 솔루션을 구현했습니다. 나는 이것이 최선의 관행인지 아닌지는 모르겠지만 그것이 나를 위해 일하는 것 같다. 이것에 문제가있을 것이라고 생각하십니까? 종류는 안부 – GreenApples53

0

DefaultHttpClient을 사용하는 경우 연결 관련 설정을 제공 할 수있는 HttpParams을 사용할 수 있습니다.

SO_TIMEOUT은 SocketTimeout입니다. 소켓 대기 시간 제한 (SO_TIMEOUT)을 밀리 초 단위로 정의합니다.이 값은 데이터를 기다리는 시간 초과 또는 두 개의 연속 데이터 패킷 간의 최대 비활성 기간입니다.

HttpParams httpParams = new BasicHttpParams(); 
httpParams.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, CONNECTION_TIMEOUT); 
httpParams.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, SOCKET_TIMEOUT); 
DefaultHttpClient backend = new DefaultHttpClient(httpParams); 

그것을하는 더 좋은 방법은 @Bandi 키 쇼어는 제안 HttpClientBuilder을 사용하는 것입니다. 또는 설정자를 사용하여 직접 이러한 설정을 허용하는 PoolingClientConnectionManager을 사용합니다.

관련 문제