RXKOTLIN/RXJAVA:使用 Observables 的套接字之间的通信

Posted

技术标签:

【中文标题】RXKOTLIN/RXJAVA:使用 Observables 的套接字之间的通信【英文标题】:RXKOTLIN/RXJAVA: Communication between the socket using Observables 【发布时间】:2021-08-29 19:02:54 【问题描述】:

我是 RXKotlin/RXJava 的新手。 我正在 android 中开发后台服务。

在我的服务中,我有

蓝牙插座 TCP 套接字

只要数据在蓝牙套接字上可用,就读取和写入 TCP 套接字。并且每当在 TCP 套接字中接收到数据时,写入蓝牙套接字。

谁能帮帮我:

如何使用 Observables 实现这一点? 如何交换socket id信息? 如何交换数据? 谢谢

【问题讨论】:

你知道如何在没有 rxJava 的情况下完成所有这些工作吗? 我们可以通过handlerthread、runnable、looper、消息队列来实现。但这是一项巨大的工作 【参考方案1】:

请尝试使用 RxSubjects (https://blog.mindorks.com/understanding-rxjava-subject-publish-replay-behavior-and-async-subject-224d663d452f)

我这里以 PublishSubject 为例。

//a publish subject which publishes int values
public PublishSubject<Integer> source = PublishSubject.create();
source.onNext(1);
source.onNext(2);

所以上面的代码行进入蓝牙套接字类。

现在在 TCP 套接字类中,使用源,你可以在这里观察。

source
    .subscribe(
        
           //result
        ,
        
           //error
        
    )

就是这样。

请确保订阅发生在蓝牙套接字开始发布数据之前。

【讨论】:

非常感谢。现在很清楚将数据从蓝牙类传输到 TCP 类。要将另一组数据从 TCP 类传输回蓝牙类,我们需要在 TCP 类中创建 observable,在蓝牙类中创建观察者。我的理解正确吗?谢谢 是的。这种方法会奏效。另外,如果您认为此答案对您有用,请接受。快乐编码 我在班级之间使用 Publishsubject 搜索了一个示例。如果可能的话,你能分享一个例子吗?谢谢 这类似于视图模型和视图中的实时数据使用。在一个类中定义主题并从另一个类中访问其对象。

以上是关于RXKOTLIN/RXJAVA:使用 Observables 的套接字之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

iOS 函数式编程 - 实现响应式框架

ObservableCollection 列表找不到方法 AddRange

Rx 操作符四

RxJava 教程-1 简介 原理 线程控制 变换

在 Angular 中使用 getElementById 可以吗?

Angular:如何使用 RXJS 6 调用 finally()