Я создаю конечную точку сервера-отправки-события с помощью 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())
}