当前位置: 首页 > 知识库问答 >
问题:

Spring WebFlux非流式响应

东郭骁
2023-03-14
@RestController
object CustomerController {
    @GetMapping("/load", produces = arrayOf("application/stream+json"))
    fun load(): Flux<String> {
        var flux = Flux.fromIterable(ResultIterable())
        flux.subscribe({println(it)})
        return flux
    }
}

我确实看到字符串按规则间隔打印(println(it))。

我正在使用以下卷曲:

curl -X GET   http://localhost:8080/load   -H 'accept: application/stream+json'   -H 'cache-control: no-cache'   -H 'content-type: application/stream+json'

共有1个答案

夏炎彬
2023-03-14

您的错误在这里:

flux.subscribe({println(it)})

您订阅流量并直接在方法中使用它。当这个流量到达Reactor Netty HTTP容器时,已经没有什么可以消耗的了。

如果您真的希望println()每个项,请考虑使用doonnext(),并将subscribe()留给容器。

所以,当我这样做的时候:

@GetMapping("/load", produces = [MediaType.TEXT_EVENT_STREAM_VALUE])
fun load() =
        Flux.just("foo", "bar", "baz")
                .doOnNext({ println(it) })

我开始在连接的客户端中获取服务器附带事件:

C:\tmp\so50823339>curl -X GET   http://localhost:8080/load
data:foo

data:bar

data:baz


C:\tmp\so50823339>

同时,我在服务器上获得所提到的doonnext()的日志:

2018-06-12 17:33:37.453  INFO 6800 --- [           main] c.e.s.s.So50823339ApplicationKt          : Started So50823339ApplicationKt in 3.112 seconds (JVM running for 3.924)
foo
bar
baz
 类似资料:
  • 流式响应 当数据产生的时候发送数据 使用分块传输编码(Chunked transfer encoding)的流式 JOSN 响应。 Server server.go package main import ( "net/http" "time" "encoding/json" "github.com/labstack/echo" ) type ( Geolo

  • 问题内容: 问题很简单:假设我有一个完全可响应的后端,如何将其流式传输到浏览器(例如大文本),并在每个块来自服务器时立即将它们打印给用户? 可能我缺少一些重要的概念性要点,但是我所需要知道的是:是否可以通过一个HTTP GET(或否)请求发送少量数据(从服务器到浏览器)?关键是:在发送全部数据之前,我可以写那些小的部分吗? 谢谢你的帮助。我以前确实尝试过google,但是我总是会得到其他概念(例如

  • 我正在使用SpringWebSockets,我想从存储库返回一个项目列表 我怎么能在WebSocket会话中发送此列表 这是如何将项目列表发送到websocket的处理程序方法

  • 下面的代码是否阻止调用,如果是,如何使其成为非阻塞?i、 e.使反应式Java流的使用变得无用?如何在不阻塞呼叫的情况下分页? 目前,我有一个webClient调用后端服务,该服务返回

  • 问题内容: 我正在使用Java远程方法调用(RMI)测试Web应用程序。当我通过加密狗,宽带连接到Internet时;RMI需要很长时间才能响应请求。完成方法调用大约需要10秒钟。我还可以看到,一旦进行方法调用,互联网连接中的数据传输速率就会提高。因此,显然,它似乎正在通过外部网络在两个内部进程之间建立RMI连接。 与互联网断开连接后,它的响应变化很快,例如几毫秒。我的/ etc / hosts文

  • 我正在评估使用Spring Webflux,但我们必须支持期望Application/JSON,而不是Application/Stream+JSON的客户机。我不清楚Spring WebFlux如何在需要Application/JSON的客户机的情况下处理Flux的序列化。 如果一个Flux序列化为application/json,而不是application/stream+json,这是一个阻塞