Servlet中使用java 9 Flow的反应流用例?

时间:2015-06-18 00:47:54

标签: servlets jetty reactive-programming reactive-streams java-9

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

Jetty project已经开始被问到:" Jetty是否被反应?"我们注意到proposal将反应流添加到java 9。

所以我们已经开始some experiments使用异步servlet IO的反应流API,这很有趣.....但没有任何关注,因为我们缺乏真正的用例来关注哪些问题是最重要的。

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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