java - 让 Twirl 流式传输 Scala 模板渲染输出?
问题描述
使用带有 Java(控制器)和 Twirl 的 Play Framework,我试图通过单个 HTTP GET 请求(使用 scala 模板,这里没什么特别的)向调用者发送一个包含大约 40MB 数据的页面。问题是当我在模板上调用渲染方法时,我的应用程序崩溃并出现 OutOfMemoryError。我 100% 肯定它与页重 VS 可用堆内存有关,我已经通过测试确认了这一点。我认为这与“为了能够正确计算 Content-Length 标头,Play 必须消耗整个响应数据并将其内容加载到内存中”这一事实有关。(https://www.playframework.com/documentation/2.5.x/JavaStream)。Twirl 模板渲染方法似乎将整个页面加载到内存中,无论如何都是一样的。
正如文档中提到的,我已经确认,如果我使用 InputStream 输出我自己的数据,一切都会顺利进行,我可以发送任意多的数据(如果我愿意,可以发送高达千兆字节的数据,它就可以了)只需在我的控制器方法中 返回ok(myInputStream)即可返回客户端。
现在,我想做的是让 Twirl 使用流式传输(为我提供 InputStream 或类似的东西)呈现其模板。我已经搜索了解决方案,阅读文档无济于事。我是不是看错了地方,或者它只是设计不可用和可能的,除了重新考虑我的模板和请求/响应之外,我别无选择?
Java 8,播放框架 2.5。
解决方案
推荐阅读
- excel - 删除多个图表的图表名称、轴、图例、网格线
- c++ - 矩形()抛出错误,表示没有匹配的函数调用
- r - 根据R中的条件乘以和替换数据框中的值
- git - 使用 Ubuntu 设置 Github SSH 密钥:将密钥提取到 Github,但在推送时仍然要求输入用户名和密码
- android - 如何从edittext获取整数并使用kotlin将它们相乘
- flutter - Flutter - 每个用户的firestore
- javascript - drawImage 将颜色保持在高档,但不保持在低档
- r - 我如何通过在 R 中识别良好的起始值来使用 fitdistrplus 找到适合我的数据的合适分布?
- javascript - 如何使用 module.exports 导出异步函数
- asp.net - 微服务无法连接数据库