【问题标题】:How can i handle connection and reconnect if connection got closed?如果连接关闭,我该如何处理连接并重新连接?
【发布时间】:2020-10-28 03:09:16
【问题描述】:

我需要此客户端长时间保持连接,我如何确保连接?因为这个问题是相关的,所以我正在更新我的问题。如果服务器关闭连接我该怎么办?或者如果客户端关闭连接?我该如何处理它并将客户端重新连接到服务器?

public void consumeServerSentEvent() {
WebClient client = WebClient.create("http://localhost:8080/sse-server");
ParameterizedTypeReference<ServerSentEvent<String>> type
 = new ParameterizedTypeReference<ServerSentEvent<String>>() {};

Flux<ServerSentEvent<String>> eventStream = client.get()
  .uri("/stream-sse")
  .retrieve()
  .bodyToFlux(type);

eventStream.subscribe(
  content -> logger.info("Time: {} - event: name[{}], id [{}], content[{}] ",
    LocalTime.now(), content.event(), content.id(), content.data()),
  error -> logger.error("Error receiving SSE: {}", error),
  () -> logger.info("Completed!!!"));

}

【问题讨论】:

  • Fariba,你找到解决方案了吗?

标签: spring-boot spring-webflux server-sent-events spring-webclient


【解决方案1】:

根据文档retrieve() 返回ClientResponseMono,但对于您的情况,您需要消耗身体的Flux。 试试这样的事情:

Flux<ServerSentEvent<String>> eventStream = client.get()
   .uri("/stream-sse")
   .retrieve()
   .flatMapMany(response -> response.bodyToFlux(type));

【讨论】:

  • 感谢您的回答,我的问题在于连接,服务器正在关闭连接,我更新了关于如何处理连接并重新连接客户端到服务器的问题,如果客户端或服务器关闭连接?
猜你喜欢
  • 1970-01-01
  • 2017-01-17
  • 2011-09-27
  • 2016-08-31
  • 1970-01-01
  • 2012-11-27
  • 2017-12-04
  • 2016-12-05
  • 2018-08-22
相关资源
最近更新 更多