Finatra — чтение запроса кусками

Вот мой вариант использования: я реализую сервер finatra, который должен иметь возможность получать много одновременных больших запросов. Эти запросы имеют большое тело (несколько мегабайт), состоящее из множества небольших объединенных объектов json.

Я хотел бы избежать загрузки всего тела запроса в память. Я ищу способ прочитать тело запроса по частям и использовать синтаксический анализатор json, который поддерживает такой асинхронный анализ.

В node.js этого можно добиться с помощью пакета jsonp (см. пример — https://github.com/jaredhanson/node-jsonsp/blob/master/examples/twitter-stream/app.js).).

Можно ли сделать что-то подобное с финатрой (и как)?

PS. Я также отправил вопрос здесь, но получил пока нет ответа.


person Amir Tuval    schedule 05.11.2014    source источник
comment
вы можете попробовать новую и идиоматическую библиотеку http://http4s.org, если вас интересует потоковая передача и высокая производительность.   -  person Erik Kaplun    schedule 05.11.2014
comment
Спасибо. Это выглядит действительно интересно. я взгляну   -  person Amir Tuval    schedule 05.11.2014


Ответы (1)


В настоящее время это невозможно с Finatra. Finatra не будет вызывать ваш маршрут до тех пор, пока весь запрос не будет получен и запомнен в ChannelBuffer. Кроме того, Finatra также считывает запрос как единый фрагмент, поэтому вы не можете получить тело длиннее ~2 МБ. Установка com.twitter.finatra.config.maxRequestSize на что-то большее, чем 2048, приведет к сбою во время выполнения.

Я перешел на Play Framework с помощью NettyServer встраивания и "String Interpolating Routing DSL", чтобы сохранить DSL, аналогичный Finatra.

person Arne Claassen    schedule 17.04.2015