代码之家  ›  专栏  ›  技术社区  ›  Nico

使用重新连接功能为基于WebFlux的SSE客户端编程

  •  0
  • Nico  · 技术社区  · 5 年前

    我正在使用webflux开发一个sse客户机。我想实现的是以某种方式设置客户机

    1. 如果SSE服务器暂时不可用,它将自动重新连接到SSE服务器
    2. 它还可以在运行时连接,以防SSE服务器从一开始就不存在。

    然而,据我所知,基于JavaScript的客户机基本上能够实现(1)和(2)。

    我的问题是:有没有一种方法可以配置WebFlux客户端来显示所需的行为(1)和(2)(理想情况下是通过构建器和流畅的编码风格“声明性地”显示)-我没有找到任何关于如何做到这一点的信息,但是,我假设这些是SSE客户机的标准要求。

    下面是我用于测试的基本代码:

            final SslContext sslContext
                    = SslContextBuilder
                    .forClient()
                    .trustManager(InsecureTrustManagerFactory.INSTANCE)
                    .build();
            final HttpClient httpClient
                    = HttpClient
                    .create()
                    .secure(t -> t.sslContext(sslContext));
            final WebClient client
                    = WebClient
                    .builder()
                    .clientConnector(new ReactorClientHttpConnector(httpClient))
                    .build();
            final ParameterizedTypeReference<ServerSentEvent<String>> type  = new ParameterizedTypeReference<ServerSentEvent<String>>() {};
    
            final Flux<ServerSentEvent<String>> eventStream
                    = client.get()
                    .uri(endpointURL)
                    .exchange()
                    .flatMapMany(it -> it.bodyToFlux(type))
                    .repeat();
    
            eventStream
                .subscribe(
                    this::updateInformation
                    , error -> LOGGER.error("Error - {}", error.getMessage())
                    , () -> LOGGER.info("Got event stream completion signal."));
    
    0 回复  |  直到 5 年前