【发布时间】:2021-11-12 15:19:40
【问题描述】:
我想知道是否可以使用 Spring Webflux 实现两种流式传输方式? 基本上,我希望让客户端发送服务器接收到的数据流,将它们映射到字符串,然后返回结果,所有这些都流利地进行,而无需收集数据。 我使用 RSocket 做到了,但我想知道是否可以使用 http 2.0(使用 Spring 和 Project-Reactor)获得相同的结果。
尝试这样做:
1- 客户:
public Mono<Void> stream() {
var input = Flux.range(1, 10).delayElements(Duration.ofMillis(500));
return stockWebClient.post()
.uri("/stream")
.body(BodyInserters.fromPublisher(input, Integer.class))
.accept(MediaType.TEXT_EVENT_STREAM)
.retrieve()
.bodyToFlux(String.class)
.log()
.then();
}
2- 服务器:
@PostMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> stream(@RequestBody Integer i) {
return Flux.range(i, i+10).map(n -> String.valueOf(i)).log();
}
或者:
public Flux<String> stream(@RequestBody Flux<Integer> i) {
return i.map(n -> String.valueOf(i)).log();
}
或者:
@PostMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> stream(@RequestBody List<Integer> i) {
return Flux.fromIterable(i).map(n -> String.valueOf(i)).log();
}
没有一个工作正常。
【问题讨论】:
-
你可以使用 websockets 做到这一点
标签: spring spring-webflux project-reactor http2