我用spring webflux构建了一个server-send-event端点。我的javascript应用程序订阅该端点,并正确接收发布的事件。但是当调用EventSource.close()时,发布者似乎没有被告知客户端关闭了连接。
因此,发布者仍然认为存在订阅,并将事件发布到该订阅。
事件流可能永远不会结束,因此我永远不会在发布者端得到完整的信号,这意味着客户端必须关闭连接。
我认为发生这种情况是因为close()调用不能到达底层的flux。
对于此问题,您有什么解决方案或变通方法吗?
@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())
}发布于 2019-07-10 03:11:25
您应该添加一个处理程序来捕获doOnNext(信号),然后检测关闭信号并对其做出响应
https://stackoverflow.com/questions/56920887
复制相似问题