11

我正在寻找在 servlet 容器(或只是 HTTP 服务器)中使用反应流的用例。

Jetty 项目已经开始被问到:“Jetty 是反应式的吗?” 我们已经注意到向 java 9 添加反应流的提议。

因此,我们已经开始了一些使用反应流 API 进行异步 servlet IO 的实验,这很有趣......但是由于我们缺乏真正的用例来关注哪些问题是最重要的,因此缺乏任何关注点。

是否有人可以分享/解释任何好的用例,以便我们可以指导我们的码头实验以满足他们的需求。我想象的那种事情是让基于 RS 的数据库发布者在 HTTP 响应或 websocket 连接上一直发送对象,使用 Flow.Processors 进行转换。

4

1 回答 1

6

一个可行的用例是在使用多部分表单数据的 POST 时,尤其是在上传文件时。

Typesafe ConductR项目(免责声明:我是它的技术主管)在用户加载捆绑包时接收多部分表单数据。我们使用akka-streams/http

我们读取了流的前两部分,因为我们的协议规定它们必须声明一些元数据,以便我们知道将包写入哪个节点。经过一些验证,我们然后确定将它们写入的节点,并连接部分消费的流。因此,接收到上传捆绑包请求的节点会协商将其写入哪个节点,而不必消耗整个流(可能是 200MB)然后再次将其写出。

写出多部分表单数据也是一个很好的用例,因为您可以从磁盘流式传输文件作为源并将其传递到某个 http 端点,即我上面描述的客户端。

这两种用例的好处是可以最大限度地减少在网络上移动字节所需的内存量,并且只在必要时执行文件 IO。

于 2015-11-28T00:03:48.073 回答