Spring WebFlux检测客户端断开连接

时间:2019-09-13 18:44:34

标签: spring spring-webflux flux server-sent-events

假设以下@RestController

@GetMapping("listen")
public Flux<Object> listen() {
    return Flux.create(sink -> process(sink));
}

在某处

sink.next(new Object());

此代码没有有关接收器状态或完成的信息

使用isCanceled尝试过,每次都返回false。

是否可以检测到客户端仍在使用FluxSink

1 个答案:

答案 0 :(得分:1)

在spring-webflux中,如果客户端关闭连接,则订阅将被取消并释放。 如果在处理方法中添加了onCancel和onDispose回调,则会看到该回调。

private <T> void process(final FluxSink<T> sink) {
    sink.onCancel(new Disposable() {
        @Override
        public void dispose() {
            System.out.println("Flux Canceled");
        }
    });

    sink.onDispose(new Disposable() {

        @Override
        public void dispose() {
            System.out.println("Flux dispose");
        }
    });
}

然后将一个http请求发送到您的端点,并在完成通量之前将其取消。您将看到两个回调都被触发。