2011-10-10 4 views
2

큰 메시지를 POST해야하는 외부 HTTP 서버에 OutOfMemory 문제가있는 경우 문제가 있습니다. 내 HTTP 클라이언트 코드가 시간 초과되지 않습니다. kill -STOP을 사용하여 HTTP 서버 프로세스를 일시 중지 (실행 취소, kill -CONT 사용)하여이 동작을 재현 할 수 있습니다.큰 메시지를 게시 할 때 HttpUrlConnection # setReadTimeout은 아무 효과가 없습니다.

전체 메시지가 출력 스트림에 기록되고 getResponseCode가 시간 초과되는 요청을 작게 유지하면 아래 코드를 사용하는 것으로 나타났습니다.

아래와 같은 큰 메시지가 표시되면 코드는 출력 스트림에 대한 쓰기 작업을 수행합니다. 나는 소켓 버퍼를 채웠다 고 추정한다. 그런 다음 코드는 절대로 시간 초과되지 않습니다.

내가 찾고있는 것은 요청을 작성할 때 시간 제한을 제어하는 ​​방법입니다.

나는 Apache HttpClient를 사용하여 비슷한 것을 시도해보고 비슷한 결과를 얻었다. 아래의 자바 코드를 다른 스레드에서 실행 해 보았습니다.하지만이 스레드는 스스로 중단되었지만 스레드는 계속 실행 중입니다.

나는 스트리밍 동작을 유지할 필요가 있지만 클라이언트 코드가 시간 초과 될 수있는 방법에 대해 어떤 아이디어라도 감사 할 것입니다.

감사합니다,

PJ

 URL url = new URL("http://unresponsive/path"); 
     HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 
     conn.setUseCaches(false); 
     conn.setConnectTimeout(10000); 
     conn.setFixedLengthStreamingMode(4 * 1000000); 
     conn.setRequestProperty("Content-Length", "4000000"); 
     conn.setReadTimeout(10000); 
     conn.setRequestMethod("POST"); 
     OutputStream os = conn.getOutputStream(); 
     for(int i = 0; i < 1000000; i++) { 
      if(i % 1000 == 0) { 
       System.out.println("write: " + i); 
      } 
      os.write("test".getBytes("us-ascii")); 
     } 
     os.close(); 
     System.out.println("response-code: " + conn.getResponseCode()); 
     InputStream is = conn.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(isr); 
     String line; 
     while((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 
     is.close(); 

답변

0

당신이 cnnection를 열고 출력 스트림에 기입 .... 내가 혼란 쓰기 대 읽기의 역할이라고 생각하는 것으로 나타납니다 ... 너는 코드가 매달려있을 때 입력 스트림에서 읽지 않으려 고한다. 그래서 타임 아웃은 타이 업을 구하기 위해 어떤 영향도 미치지 않을 것이다 ..

쓰기를 시간 초과하는 방법이 있다면, 코드는 다음과 같이 할 수있다. 그런 식으로 고정 시켜라.

+0

감사합니다. jayunit100. 읽기 타임 아웃은 응답 읽기에만 적용되어야하지만 쓰기 타임 아웃을 설정하는 방법은 없다는 것을 알고 있습니다. 연결 시간 제한을 설정했지만이 방법도 도움이되지 않습니다. –

관련 문제