Как включить передачу-кодирование: по частям в Java на AppEngine

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

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

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

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

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

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

Точно так же в ссылках, отличных от движка приложений, говорится об установке заголовка содержимого «transfer-encoding», но это явно игнорируется в AppEngine (по крайней мере, согласно документам python — на стороне Java ничего не найдено, что утверждает это явно, но это не сработало, когда я тестировал его).

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

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


person Geoff Willingham    schedule 11.03.2011    source источник


Ответы (1)


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

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

См. ответы Java.

person Chris Farmiloe    schedule 11.03.2011