Spring Webflux обнаруживает разрыв соединения SSE с задержкой - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу использовать Spring Webflux с Server Sent Events и Netty. Я был в состоянии получать события на стороне клиента. Но когда происходит много событий одно за другим, и клиент отменяет подписку, сервер отправляет больше событий, а клиент не получает их.

Хронология:

0 - Server checks if the downstream cancelled. It is not cancelled and the server sends event A 
1 - Client receives event A
3 - Client closes SSE connection 
4 - Server checks if the downstream cancelled. It is actually cancelled, but server does not detect it and sends event B 
5 - Server checks if the downstream cancelled. It is actually cancelled, and server detects it and does not send event C

Проблема в том, что я не могу быть уверен, было ли доставлено событие B или нет, потому что в данный момент в отправленном сообщении нет свидетельств о закрытом соединении. Итак, вопрос в том, как мне избежать такой ситуации? Как я могу узнать, доставлено ли сообщение или действительно ли открыто соединение в момент отправки сообщения?

Это мой контроллер:

 @GetMapping
  public Flux<ServerSentEvent> stream()  { 
    return Flux.<ServerSentEvent>push(emitter -> {
      long counter = 0;
      while (!emitter.isCancelled()) {
        emitter.next(ServerSentEvent.builder(++counter).build());
        System.out.println(counter);
       }
    }, OverflowStrategy.ERROR);
  }

Это хвост клиентского журнала. :

...

data:212

data:213

data:214

Это хвост сервера журнала:

...
213
214
215
216
...