如何在应用程序内存中不包含整个响应正文的情况下,随时将响应从响应式HTTP客户端流式传输到控制器?
实际上,项目反应器客户端的所有示例都返回Mono<T>。据我所知,反应式流是关于流的,而不是加载所有内容然后发送响应。
有没有可能返回某种类型的Flux<Byte>,使得从一些外部服务向应用程序客户端传输大文件成为可能,而不需要使用大量的内存来存储中间结果?
发布于 2018-12-10 21:56:53
这应该通过简单地返回一个Flux<WHATEVER>来完成,其中每个内容都将尽快刷新到网络上。在这种情况下,响应使用分块HTTP编码,并且每个分块中的字节一旦被传输到网络就会被丢弃。
另一种可能是将HTTP response升级为SSE (服务器发送的事件),这可以在WebFlux中通过将Controller方法设置为类似@GetMapping(path = "/stream-flux", produces = MediaType.TEXT_EVENT_STREAM_VALUE) ( produces部分是重要的部分)来实现。
发布于 2018-12-20 16:49:40
我不认为在你的场景中你需要创建一个事件流,因为事件流更多的是用来实时发出事件,我认为你最好这样做。
@GetMapping(value = "bytes")
public Flux<Byte> getBytes(){
return byteService.getBytes();
}你可以给它发送一个流。如果您仍然希望将其作为流
@GetMapping(value = "bytes",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<List<Byte>> getBytes(){
return byteService.getBytes();
}https://stackoverflow.com/questions/53592011
复制相似问题