我用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())
}
答案 0 :(得分:0)
您应该添加一个处理程序以捕获doOnNext(Signal),然后检测关闭信号并对其进行响应