我创建了一个示例客户端/服务器应用程序,以熟悉Spring Webflux / Reactor Netty。现在,当响应包含Flux且媒体类型为“文本/事件流”时,我对客户端的行为有些困惑。我看到的是,服务器上产生的每个元素都立即发送给客户端,但尚未传递给订户。在服务器端的生产者完成Flux之后,首次交付给订户。 对我来说,这意味着所有元素都首先收集到客户端的反应堆网络中的某个位置,直到它收到完整/错误事件为止。
我的结论是对的还是在那做错了什么? 如果属实,这会在不久的将来改变吗?根据我目前观察到的行为,使用Spring Webflux的大多数好处都被否定了,因为与Spring Mvc一样,消费者必须等到创建并转移了整个元素集合之后,才能开始使用元素。
答案 0 :(得分:0)
取自反应性文档,并进行了重写以适合您的需求。
我的猜测是,在您的示例中,您已给您传递了generate函数一个消费者,该消费者在完成时将被发出。
通过使用方法Flux#generate(Callable<S> stateSupplier, BiFunction<S,SynchronousSink<T>,S> generator)
来提供一个包含要发出的项目的状态,然后在提供的BiFunction
中,一一发出每个项目。
Flux<String> flux = Flux.generate(
() -> List.of("1!", "2!", "3!", "4!", "5!"),
(state, sink) -> {
if (index == allStrings.size()) {
sink.complete();
} else {
sink.next(state.get(index++));
}
});
我还没有测试用手机编写的代码。