Как закрыть соединение с sse flux с помощью javascript-клиента? - PullRequest
1 голос
/ 07 июля 2019

Я создаю конечную точку сервера-отправки-события с помощью Spring WebFlux. Мое приложение javascript подписывается на эту конечную точку и правильно получает опубликованные события. НО при звонке EventSource.close() кажется, что издатель не проинформирован о том, что клиент закрыл соединение.

Следовательно, издатель все еще думает, что есть подписка, и публикует события для этого.

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

Я думаю, что это происходит потому, что вызов close () не может достичь основного потока.

Есть ли у вас какое-либо решение или способ решения этой проблемы?

@GetMapping(value = INSTANCE_UPDATE_ENDPOINT + "/{dealId}", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<InstanceUpdatedQuery>> getInstanceUpdateEventStreamForDeal(@PathVariable final String dealId) {

       return this.instanceUpdatedApplicationEventFlux
               .filter(instanceUpdatedEvent -> instanceUpdatedEvent.getDealId().equals(dealId))
               .map(instanceUpdatedEvent -> ServerSentEvent.<InstanceUpdatedQuery>builder()
                       .id(instanceUpdatedEvent.getId())
                       .retry(Duration.ofSeconds(1))
                       .data(new InstanceUpdatedQuery(instanceUpdatedEvent))
                       .build())
}

1 Ответ

0 голосов
/ 09 июля 2019

Вы должны добавить обработчик, чтобы перехватить doOnNext (Сигнал), а затем обнаружить сигнал закрытия и ответить на него

...