2015-03-04 3 views
4

Я выполняю итерацию по большому набору данных, с регулярными вызовами play.mvc.Results.Chunks.Out.write(...) с onReady.Как отредактировать ответы в Play без исчерпания памяти

Поскольку записи происходят быстрее, чем данные отправляются клиенту, через некоторое время у меня будет нехватка памяти ... Итак, каков правильный способ сделать это?

ответ

3

К сожалению, это ограничение Java API игры в Play на данный момент. В API Java нет способа получить противодавление от клиента, поэтому его легко заглушить. Это будет исправлено в Play 3, когда мы предоставим лучший API потоков для Java-клиентов, возможно, на основе Akka Streams.

Если вам действительно нужно решить эту проблему, вы можете написать небольшую программу в Scala на основе перечислений Play, а затем обернуть ее, чтобы вы могли получить к ней доступ из вашей Java-программы.

+0

Ничего себе, это должно быть большой красной оговоркой в ​​Play Docs! – ejain

+0

Да! Методы Java API должны действительно возвращать обещания, чтобы вы могли дождаться Promise перед отправкой следующего бита данных. –

+0

Оказывает, что изнурение кучи в этом случае было связано с утечкой памяти в новой реликвии ... Конечно, возможность подождать, прежде чем отправлять больше данных, по-прежнему кажется хорошей идеей. – ejain

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