如何使用SSE在RxJava2 Flowable上处理浏览器关闭案例动作/事件服务器发送事件

问题描述

如果消费者关闭浏览器或以某种方式与SSE流断开连接,我想得到通知。

作为示例,当连接以curl开始时,将调用doOnSubscribe操作,并且connectedDeliveryCount会增加,但不会减少,尽管我故意使用ctrl-c关闭了连接。没有一个事件像doOnCompletedoOnTerminatedoOnCancel

那样被调用

与get的示例连接

faruk@virtualBox:/usr/lib/jvm$ curl -X GET http://localhost:8080/delivery-stream -v
Note: Unnecessary use of -X or --request,GET is already inferred.
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /delivery-stream HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
> 
^C
faruk@virtualBox:/usr/lib/jvm$

代码块:

static AtomicInteger connectedDeliveryCount = new AtomicInteger();

@GetMapping(path = "/delivery-stream",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flowable<String> deliveryStream() {
        return ReactiveStreamsOrderService.deliverySubjectToFlowable()
                .doOnCancel(() -> System.out.println("{doOnCancel}: xxx"))
                .doOnComplete(() -> System.out.println("{doOnComplete}: xxx"))
                .doOnSubscribe(disposable -> System.out.println("{doOnSubscribe}: xxx"))
                .doOnTerminate(() -> System.out.println("{doOnTerminate}: xxx"))
                .onErrorReturn(throwable -> "xxx"+throwable.getMessage())
                .doOnSubscribe(subscription -> connectedDeliveryCount.incrementAndGet())
                .doOnTerminate(() -> connectedDeliveryCount.decrementAndGet())
                ;
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)