如何使用javascript-client关闭与sseflux的连接?

时间:2019-07-07 09:28:00

标签: javascript java spring server-sent-events reactor

我用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 :(得分:0)

您应该添加一个处理程序以捕获doOnNext(Signal),然后检测关闭信号并对其进行响应