如何在 运行 内存不足的情况下在 Play 中分块响应

How to chunk responses in Play without running out of memory

我正在遍历一个大型数据集,从 onReady.

中定期调用 play.mvc.Results.Chunks.Out.write(...)

因为写入的速度比数据发送到客户端的速度快,我经常 运行 一段时间后内存不足...那么正确的方法是什么?

不幸的是,这是目前 Play 中 Java API 的限制。 JavaAPI中没有办法从客户端得到背压,所以很容易压垮客户端。当我们向 Java 客户端提供更好的流 API 时,这将在 Play 3 中修复,可能基于 Akka Streams.

如果你真的需要解决这个问题,那么你可以在 Scala 中基于 Play 的 Enumerators 编写一个小程序,然后将它包装起来,这样你就可以从你的 Java 程序中访问它。