【问题标题】:Flux responce instead of WebSocket (Spring boot)Flux 响应而不是 WebSocket (Spring boot)
【发布时间】:2019-05-02 18:07:54
【问题描述】:

我正在编写服务,它将在新数据到达我的服务器时将其发送给用户。 所以服务器接收数据,这一切都将交给用户。 为此,我使用了 WebSocket。用户订阅一个主题,然后接收有关新数据的信息。 但是我在 WebFlux 中看到我们可以像在套接字中一样连续返回数据。例如

@GetMapping(value = "/test", produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
    public Flux<Object> testStreamOfData() {
        return Flux.generate(() -> "", (state, sink) -> "Hello from reactivness")
                .delayElements(Duration.of(2, ChronoUnit.SECONDS));
    }

问题是:我可以用 Flux 实现与 Socket 相同的逻辑吗?

例如,用户将向服务器发出请求,并在新数据到来时返回响应。

【问题讨论】:

    标签: spring-boot spring-webflux reactive


    【解决方案1】:

    您确实可以使用Flux 来通过 Spring WebFlux 流式传输数据。

    Spring WebFlux 使用 "application/stream+json 媒体类型流式传输 line-delimited JSON"text/event-stream" 用于服务器发送事件。前者对于服务器到服务器的通信非常有用(您需要一个支持这种格式的客户端),而后者对于服务器到浏览器的通信(浏览器本机支持)非常有用。

    因此您可以将数据流式传输到多个客户端,甚至共享同一个源(您应该考虑创建Flux.share() 的单个实例)。

    现在我不确定“socket”是指 TCP 套接字还是 socket.io。 TCP 套接字非常低级,如果您正在寻找类似的功能,WebFlux 支持 WebSockets。如果您正在寻找支持订阅的更高级别的传输,例如 STOMP/socket.io,那么 WebFlux 还不支持(Spring Framework 目前正在开发RSocket support)。

    如果您正在研究将数据流式传输到浏览器,那么 SSE 是这里的最佳选择(因为 JSON 流不原生支持)。

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 2019-05-24
      • 1970-01-01
      • 2020-04-04
      • 2021-08-23
      • 2018-01-20
      • 2019-01-21
      • 2019-02-23
      • 2016-05-06
      相关资源
      最近更新 更多