2014-11-05 3 views
1

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

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

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

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

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

+0

вы можете проверить новую и идиоматическую библиотеку [http4s] (http://http4s.org), если вы заинтересованы в потоковой передаче и высокой производительности. –

+0

Спасибо. Это выглядит действительно интересно. я взгляну –

ответ

0

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

Я переключился на Play Framework, используя NettyServerembed и «String Interpolating Routing DSL», чтобы сохранить DSL, подобный Finatra.