RxJava退订网络关闭

时间:2019-07-12 11:58:01

标签: java networking stream rx-java vert.x

如果网络请求已关闭,我目前正在尝试取消订阅可观察的内容,以不再进一步传输数据。

我的可观察对象的创建方式为:

Observable.interval(1, TimeUnit.SECONDS)
.map { LocalDateTime.now() }.share()

因此有多个订阅者。但是我不知道如何在网络关闭的情况下退订。

我目前正在使用vert.x将具有服务器发送事件的数据流传输到客户端,如下所示:

flow.subscribe({
  response.write("the current time is $it")
}, ::println, {
  response.end()
})

如果我取消了来自客户端的请求,则可观察对象将继续“传输”数据。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以通过调用 dispose()

取消订阅
Disposable disposable = flow.subscribe({
  response.write("the current time is $it")
}, ::println, {
  response.end()
})

disposable.dispose();

更新:可观察的自定义

val observable: Observable<LocalDateTime> = Observable.create { emitter ->
    val timer = Timer()
    timer.schedule(timerTask {
        if (emitter.isDisposed) {//<-- cancel emmitting items if disposed
            timer.cancel()
        } else {
            emitter.onNext(LocalDateTime.now())
        }
    }, 0, 1000)

}
disposable = observable.share().subscribe { t ->
    System.out.println(" Hello World! $t");
    disposable?.dispose()//<-- here calling dispose() causes observable to stop emitting items
}

答案 1 :(得分:0)

您可以将config/app.php运算符与响应takeUntil一起使用:

closeHandler