refCount 即使发生错误也能保持连接

Posted

技术标签:

【中文标题】refCount 即使发生错误也能保持连接【英文标题】:refCount keeping connection even after an error 【发布时间】:2021-08-07 21:19:44 【问题描述】:

我正在使用 refCount 将 BLE 连接保持 5 分钟。这在我遇到连接问题之前效果很好,refCount 仍然保持连接并重播重播错误。

有没有一种方法可以让 refCount 在出现错误时立即断开连接,或者让重放而不是重放错误?

        bleDevice
            .establishConnection(false)
            .replay(1)
            .refCount(1, 5, TimeUnit.MINUTES)

【问题讨论】:

如果没有订阅者强制存在,.refCount() 是否会在超时之后断开连接? 你有哪个 RxJava 版本? 3.x 应该可以正常工作。 不幸的是,RxandroidBle 仍然是基于 2.x 的。计划对此进行更改。 @DariuszSeweryn BT 连接创建速度很慢(用户需要在 BT 设备上确认连接),因此对于这个特定设备,我们希望保持连接。 【参考方案1】:

实现您想要的简单方法是使用 RxJava 3 refCount 运算符。您可以使用 RxJava 2 3 互操作性库 RxJavaBridge。

val connectionObservable = bleDevice
    .establishConnection(false)
    .`as`(RxJavaBridge.toV3Observable())
    .replay(1)
    .refCount(1, 5, TimeUnit.MINUTES)
    .to(RxJavaBridge.toV2Observable()) // optional if you want to stick to RxJava 3

【讨论】:

以上是关于refCount 即使发生错误也能保持连接的主要内容,如果未能解决你的问题,请参考以下文章

AtlUnadvise 调用后 RefCount 保持不变

即使有随机错误,Xcode 也能成功构建目标

发生错误 1042:连接超时已过期

使用 Tcl C API 的 Lib 可能由于错误的 refCount 使用而崩溃

即使在发送响应时也能在不发送响应错误的情况下解析 API

为啥 ASP.NET 动态控件即使添加到 Page_Load 中也能保持 ViewState?