2012-10-30 2 views
1

서블릿의 성능을 테스트하는 애플리케이션을 작성했습니다. 필자가 작성한 코드는 일부 요청에서 잘 작동합니다. 만약 내가 더 많은 연결을 증가 시키면 어떤 때는 "너무 많은 바이트를 쓰게됩니다"예외가 생깁니다.너무 많은 바이트가 쓰여짐 - HttpsURLConnection

int startRange = 0, endRange = 10000; 
HttpsURLConnection c = null; 

c = getHttpsConnection(URL); 
c.setDoInput(true); 
c.setDoOutput(true); 
c.setRequestProperty("Content-Length",(cotentLength+1)); 
c.setFixedLengthStreamingMode(contentLength+1); 
c.setRequestProperty("Content-Type","appplication/zip"); 
c.setRequestMethod("POST"); 
c.setRequestProperty("Content-Range", "bytes "+startRange+"-"+endRange+"/"+filesize); 

OutputStream op = c.getOutputStream(); 

난 다음 byte[] partBuf = new byte[contentLength+1];

내가 "너무 많은 바이트 작성 오류"특정 요청이 전송 개까지 얻을 해달라고

op.write(partBuf) 
String range = c.getHeaderField("Range"); 

in.close(); 
op.flush(); 
op.close(); 

로 보낼 수있는 고정 덩어리를 계산, 전송 너무 많은 요청이 나를 준다 이 오류는 때로는 .. 이 시나리오를 어떻게 처리합니까?

보통 테스트를 위해, 어떤 inturn이 청크로 데이터를받는 서블릿에 도달하는 몇 가지 요청을 10, 100, 500, 1000에서 생성합니다.

답변

1

샘플 코드에는 많은 오타가 있으므로 실제 코드가 무엇인지 명확하지 않습니다. 문자열이어야한다

c.setRequestProperty("Content-Range", startRange-endRange/filesize); 

해당 헤더의 내용을,하지만 당신은 정수 값을 보내는 것 같다 그러나 이것은 매우 잘못된 보인다. 다음은 헤더 이어야하는 HTTP 1.1 스펙의 예입니다.

HTTP/1.1 206 Partial content 
    Date: Wed, 15 Nov 1995 06:25:24 GMT 
    Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT 
    Content-Range: bytes 21010-47021/47022 
    Content-Length: 26012 
    Content-Type: image/gif 

수정 된 버전은 여전히 ​​올바르지 않습니다. 그것은이 같아야

c.setRequestProperty("Content-Range", 
        "bytes " + startRange + "-" + endRange + "/" + filesize); 

... 해당 변수가 적절한 값을 가지고 있다고 가정. 이제 이러한 오류를 해결 한 것을


는 의심의 나의 다음 지점은 값 자체 ... 그리고 contentLength 값입니다.

그 대답이 아니라면 서버 또는 서블릿이 POST의 "Content-Range"를 지원하지 않을 가능성을 고려하십시오.

+0

거기 .. 내 오타를 수정하고 수정했습니다. 문제를 해결하기 위해 무엇을 할 수 있는지 말해주십시오. –

+0

그것은 제가 연결을 연 방법과 관련이 있습니다. 클래스의 구성원 데이터를 연결하고 스레드에 대한 각각의 요청에 대해 동일한 연결을 재사용해야합니까? –

+0

예. 오타를 무시하십시오 .. 테스트 응용 프로그램이 잘 작동합니다 .. 전체 프로그램에 이미 언급 한대로 이러한 것들이 있습니다. 그것을 해결할 해결책을 말해주십시오. –

0

잘못된 콘텐츠 길이 값을 설정했습니다. 자바를 설정하지 않아도됩니다. 코드를 삭제하십시오.

+0

나는 이것을 시도했지만, 그럼에도 불구하고 나는이 오류를 얻는다. 각 스레드는 30KB의 청크로 전송되는 1MB 파일을 업로드하려고하므로 전송할 30KB 청크가있을 때마다 연결이 열리고 연결이 끊어집니다. –