如何用 Flux (Reactor) 冲洗?

Posted

技术标签:

【中文标题】如何用 Flux (Reactor) 冲洗?【英文标题】:How to flush with Flux (Reactor)? 【发布时间】:2019-06-23 12:53:39 【问题描述】:

我想订阅服务器发送的事件(参见下面的示例)

在客户端浏览器和 java 服务器之间是另一个使用 compress nodejs 中间件的应用程序。

当我尝试通过浏览器访问此服务器发送的事件时,此中间件会导致 ERR_INCOMPLETE_CHUNKED_ENCODING。

为了让它运行起来,我应该做一个 .flush() ,这里有更详细的描述(对于 nodejs 应用程序):https://github.com/expressjs/compression/blob/master/README.md#server-sent-events

我的代码目前如下所示:

@RequestMapping(method = RequestMethod.GET, value = "/fluxTest", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> getFluxStream(HttpServletRequest request) 
    String[] randomNames =  "Steve", "Dirk", "Jens", "Rene";

    return Flux.interval(Duration.ofSeconds(1))
               .map(sequence -> "\"name\": \"" + randomNames[new Random().nextInt(randomNames.length)] + "\"");

如何在 java 中触发 .flush(),如 nodejs 压缩文档中所述?

谢谢!!!

【问题讨论】:

【参考方案1】:

如果在响应中添加 header("Cache-Control", "no-transform"),则压缩库不会转换正文。我知道这不是解决这个问题 问题,但仍然是一种临时解决方法。

【讨论】:

以上是关于如何用 Flux (Reactor) 冲洗?的主要内容,如果未能解决你的问题,请参考以下文章

学习响应式编程 Reactor - reactor 基础

reactor3 flux 的使用

是否建议将 Arraylist 转换为 Reactor 的 Flux 用于处理数据?

Reactor详解之:异常处理

Reactor中的Thread和Scheduler

Spring & Reactor:使用来自 repo 的 Flux 订阅两个参数的二进制函数