Scala & Finatra:将文件服务器响应直接从磁盘发送到网络 w/o 加载到内存中

Scala & Finatra: send file server response directly from disk to network w/o loading into memory

我的工作任务是通过 finatra 直接从磁盘向我们的客户发送文件,而无需加载到内存中(这些文件非常大)。这是我的问题:

0) 如何在不将信息加载到内存的情况下与磁盘交互 i/o?

1) 将文件输入流连接到 http 输出流时,是否真的将内存加载到 ram 中?

2) 我认为所有东西都必须加载到内存中才能使用、传输和发送。如何将内容直接发送到正在加载到内存中的网络端口w/o?

3) 内存流是从磁盘到 cpu 寄存器,再到网络适配器缓冲区以供发送吗?如何保证这是不加载ram的流程?

4) 是否可以在 Finatra 中执行此操作

很遗憾,Finatra 1.6 无法实现。 Streaming 似乎在 2.0 的路线图上,但没有关于其发布的官方消息。现在,Request => Response 依赖于记忆的输入和输出。在 Finatra 中处理主体的最有效方法是将它们保存在 ChannelBuffers 中,这样至少只有一个实例化了字节。