Как включить кодирование передачи: chunked в Java на AppEngine - PullRequest
4 голосов
/ 11 марта 2011

Я провел несколько поисков в Google по этой теме, но не смог ничего найти (кроме подтверждения того, что AppEngine игнорирует вызовы 'resp.setHeader ("Transfer-Encoding", XXXX) ".

Моя проблема заключается в том, что у меня есть серверный процесс, который занимает немного времени (~ 3 секунды), но который выдает результаты в непрерывном потоке (то есть первый объект данных готов через 10 мс).

В настоящее время сервер буферизует ответ, а затем выкладывает весь лот клиенту для отображения. Хотя это работает, это не блестящий пользовательский опыт, поскольку пользователю приходится ждать, пока весь процессзакончить, прежде чем они смогут увидеть первые результаты ...

Я полагаю, что использование чанкованной передачи решит эту проблему, так как я смогу немедленно отправить первый ответ клиенту (и передать последующие данные каккак только он стал доступен), давая гораздо лучшее представление о прогрессе и т. д.

Моя проблема в том, что я не могу понять, как это сделать.Передача

Поиск в Google для чанкованной передачи, и механизм приложений в основном включает сообщения от людей, желающих отключить чанкованную передачу из blobstore, или сообщения о том, что чанковая передача включена по умолчанию.Тем не менее, мое тестирование на сегодняшний день показало, что, по крайней мере для моего приложения, это не так.

Аналогично, ссылки не-app-engine говорят о настройке заголовка контента 'Transfer-Encoding' - но этоявным образом игнорируется в AppEngine (по крайней мере, в соответствии с документацией по Python - не найдено ничего на стороне Java, что прямо заявляет об этом, но это также не сработало, когда я его проверял).

наконец,Я уже пытался очистить объект respose, получить средство записи и очистки, получить поток вывода ответа и сброс и т. Д. Без разницы.

Итак, мой вопрос: как включить чанк-передачу?

1 Ответ

5 голосов
/ 11 марта 2011

Appengine не поддерживает потоковую передачу ответов. Весь ответ должен быть возвращен сразу.

App Engine не поддерживает отправку данных клиенту, выполнение большего количества вычислений в приложении, а затем отправку большего количества данных. Другими словами, App Engine не поддерживает потоковую передачу данных в ответ на один запрос.

См. Ответы Java

...