2011-07-07 1 views
1

Я пишу приложение для Google App Engine с Java. Определенный сервлет производит ответы, которые могут превышать лимит в 32 мегабайта. На сервере разработки это, похоже, не вызывает никаких проблем. На рабочем сервере мне нужен способ разделить ответ на несколько запросов.Как определить размер ответа HTTP в Google App Engine

Я хочу знать, что происходит на производственном сервере, когда предел превышен. Оставляет ли PrintWriterIOException при превышении лимита? Или это исключение, которое вызывается только при завершении сервлета? В идеале я хотел бы вычислить общий размер ответа до добавления каждого раздела (без учета самих байтов, потому что я не знаю размер заголовков HTTP), так что я могу правильно очистить конец ответ (т.е. добавьте «}» для завершения объекта JSON). Или есть лучший способ справиться с такой ситуацией?

+0

Ограничение на HTTP-запросы и ответы на App Engine было недавно увеличено до 32 МБ. До этого это было 10 МБ в течение некоторого времени. –

+0

Документы говорят 32 МБ для запросов и 10 МБ для ответов. Хотя превышение этого предела менее вероятно, это определенно еще возможно. Поэтому я думаю, что этот вопрос по-прежнему остается в силе. – Zifre

+0

"без учета самих байтов, потому что я не знаю размер заголовков HTTP". Ну, заголовки не будут такими большими, если вы разрешите им 25K, вы должны быть в безопасности. – Thilo

ответ

0

ник правый, текущий размер ограничения на размер составляет 32 МБ.

Отклики приложений буферов приложений, поэтому он не видит вашего ответа до тех пор, пока ваш код не закончит работу, поэтому он не может возбудить исключение или иным образом сигнализировать об ошибке, которую может получить ваш код. вместо этого, он возвращает 500 клиенту с телом, как это:

HTTP ответ был слишком велик: 34000134. Предел: 33554432.

вы можете попробовать это самостоятельно, выполнив это в http://shell.appspot.com/:

print 'x' * 34 * 1000 * 1000

+0

есть * какой-либо * способ вокруг этого? Например, используя пользовательскую среду выполнения в 'app.yaml'? Я работаю над потоковым медиа-приложением, которое загружает файлы на клиент, размер которых превышает 32 МБ, и для поддержки потоковых мультимедийных файлов требуется GCE. В настоящее время представляется, что GCE (1) буферизует данные ответа и (2) может иметь ограничение в 32 МБ (используя «runtime: ruby»). – Tronathan

 Смежные вопросы

  • Нет связанных вопросов^_^