2011-07-07 3 views
1

Java가있는 Google App Engine 용 앱을 작성하고 있습니다. 특정 서블릿이 32 메가 바이트 한도를 초과하는 응답을 생성합니다. 개발 서버에서이 문제는 발생하지 않습니다. 프로덕션 서버에서 여러 요청을 통해 응답을 분할하는 방법이 필요합니다.Google App Engine에서 HTTP 응답 크기를 감지하는 방법

한계를 초과하면 프로덕션 서버에서 어떤 일이 발생하는지 알고 싶습니다. 한도를 초과하면 PrintWriterIOException을 던집니까? 아니면 서블릿이 종료 될 때 예외가 발생합니까? 이론적으로는 각 섹션을 추가하기 전에 총 응답 크기를 계산할 수 있기를 원합니다 (HTTP 헤더의 크기를 모르기 때문에 바이트를 직접 계산하지 않고). 응답 (예 : "}"을 추가하여 JSON 객체 완성). 아니면 이런 유형의 상황을 처리하는 더 좋은 방법이 있습니까?

+0

최근에 App Engine에서 HTTP 요청 및 응답의 제한이 32MB로 늘었습니다. 그 전에는 꽤 오랫동안 10MB였습니다. –

+0

docs는 요청의 경우 32MB, 응답의 경우 10MB를 말합니다. 이 한도를 초과 할 가능성은 낮지 만 확실히 가능합니다. 그래서 나는 그 질문이 여전히 유효하다고 생각한다. – Zifre

+0

"HTTP 헤더의 크기를 모르기 때문에 바이트를 직접 계산하지 않아도됩니다." 음, 헤더가 그다지 크지 않을 것입니다. 25K를 허용하면 안전해야합니다. – Thilo

답변

0

닉의 오른쪽 현재 응답 크기 제한은 32MB입니다.

앱 엔진이 응답 데이터를 버퍼링하므로 코드 실행이 완료 될 때까지 응답이 표시되지 않으므로 예외가 발생하거나 코드에서 catch 할 수있는 오류를 알릴 수 없습니다. 대신,이 같은 시체와 함께 클라이언트에 500를 반환

HTTP 응답이 너무 커서 : 34000134. 제한은 다음과 같습니다 33554432.이

당신이 http://shell.appspot.com/이를 실행하여 그것을 자신을 시도 할 수 있습니다 :

print 'x' * 34 * 1000 * 1000

+0

이 주변에 * 어떤 방법이 있습니까? 예를 들어,'app.yaml'에서 커스텀 런타임을 사용하고 있습니까? 저는 32MB보다 큰 클라이언트에 파일을 다운로드하는 스트리밍 미디어 앱을 개발 중이며 대용량 미디어 파일 스트리밍을 지원하려면 GCE가 필요합니다. 현재 GCE (1)는 응답 데이터를 버퍼링하고 (2)'runtime : ruby'를 사용하여 32MB 제한을 가질 수 있습니다. – Tronathan

관련 문제