当前位置: 首页 > 编程笔记 >

rx-java PublishSubject

越英韶
2023-03-14
本文向大家介绍rx-java PublishSubject,包括了rx-java PublishSubject的使用技巧和注意事项,需要的朋友参考一下

示例

PublishSubject只向观察者发送那些在订阅时间之后由源Observable发出的对象。

一个简单的PublishSubject例子:

Observable<Long> clock = Observable.interval(500, TimeUnit.MILLISECONDS);
Subject<Long, Long> subjectLong = PublishSubject.create();

clock.subscribe(subjectLong);

System.out.println("sub1订阅...");
subjectLong.subscribe(l -> System.out.println("sub1 -> " + l));
Thread.sleep(3000);
System.out.println("sub2订阅...");
subjectLong.subscribe(l -> System.out.println("sub2 -> " + l));
Thread.sleep(5000);

输出:

sub1订阅...
sub1 -> 0
sub1 -> 1
sub2订阅...
sub1 -> 2
sub2 -> 2
sub1 -> 3
sub2 -> 3

在上面的示例中,aPublishSubject订阅了一个Observable类似于时钟的,并items(Long)每500毫秒发出一次。从输出中可以看出,PublishSubject从源(clock)到其订户(sub1和sub2)的价位传递。

APublishSubject可以在没有任何观察者的情况下立即开始发射物品,这冒着一个或多个物品丢失的风险,直到观察者可以晒黑为止。

createClock(); //为简洁起见,移动了3行。与上述示例相同

Thread.sleep(5000); // 在首次订阅之前引入延迟

sub1andsub2(); //为简洁起见,移动了6行。与上述示例相同

输出:

sub1订阅...
sub1 -> 10
sub1 -> 11
sub2订阅...
sub1 -> 12
sub2 -> 12
sub1 -> 13
sub2 -> 13

请注意,sub1发出的值从开始10。引入的5秒延迟导致物品丢失。这些不能复制。这实质上是让PublishSubject一个Hot Observable。

另外,请注意,如果观察者PublishSubject在发出n个项目后订阅了,则该n个项目无法为该观察者再现。

下面是大理石图 PublishSubject

调用源PublishSubject之前的任何时间点,都会向所有已订阅的对象发射项目。onCompletedObservable

如果源Observable由于错误而终止,PublishSubject则不会将任何项目发送给后续的观察者,而只会传递来自源Observable的错误通知。

用例
假设您要创建一个应用程序,该应用程序将监视某个公司的股票价格并将其转发给所有要求它的客户。

/* Dummy stock prices */
Observable<Integer> prices = Observable.just(11, 12, 14, 11, 10, 12, 15, 11, 10);

/* Your server */
PublishSubject<Integer> watcher = PublishSubject.create();
/* subscribe to listen to stock price changes and push to observers/clients */
prices.subscribe(watcher);

/* Client application */
stockWatcher = getWatcherInstance(); // 得到主题
Subscription steve = stockWatcher.subscribe(i -> System.out.println("看着史蒂夫 " + i));
Thread.sleep(1000);
System.out.println("steve stops watching");
steve.unsubscribe();

在上述示例用例中,PublishSubject充当了将值从服务器传递给预订的watcher所有客户端的桥梁。

 类似资料:
  • RX

    rx 是一个可扩展的、现代的、极简主义的像素编辑器 ,在 rust 中实现。rx 是免费软件,在 GPLv3 下获得许可。   特性 内置精灵动画支持,带实时预览。 同时处理多个文件。 可扩展的命令系统。 可使用简单的基于文本的语言进行配置。 支持 HiDPI。 用户界面缩放。 撤消/重做任何编辑。 动画 GIF 输出。 多刷/同步编辑。 画笔过滤,又名“像素完美”模式。 像素操作的视觉模式。 安

  • RX 文件管理器是一款功能强大的 UWP 文件管理器,其 UI 广泛使用亚克力效果,拥有多彩的个性化系统。 功能 • 内置一些基础的文件查看器 • 内置 Zip、Tar、Gz 格式的压缩和解压功能 • 支持通过蓝牙或 WIFI 共享文件 • 支持多标签页和多进程模式 • 支持有限度替代 Windows Explorer • 支持网络驱动器、USB 设备和 MTP 设备 • 基础的音视频文件转码功能

  • RxAngular RxAngular offers a comprehensive toolset for handling fully reactive Angular applications with the main focus on runtimeperformance and template rendering. RxAngular is divided into differen

  • 原文档 组件源码 组件示例 中英文对照表 observable sequences:可观察序列 Rxified:Rx化 operator:操作符 lift:变换 flow:流 read stream:可读流 write stream:可写流 observer:观察者 subscriber:订阅者 item:对象 handler:(事件)处理器 timer:定时器 subscription(n.):

  • 本文向大家介绍rx-java 介绍,包括了rx-java 介绍的使用技巧和注意事项,需要的朋友参考一下 示例 背压是在Observable处理管道中时,某些异步阶段无法足够快地处理值,因此需要一种方法来告诉上游生产者放慢速度。 需要背压的经典情况是生产者是热源时: 在此示例中,主线程将向在后台线程上对其进行处理的最终消费者生产100万件商品。该方法可能会compute(int)花费一些时间,但Ob

  • QAP的组件都是在是weex-rx的基础上构建的,所以在写qap组件的时候,都需要先引入weex-rx,并在Component上扩展自己的方法。 weex-rx就是组件和QAP容器通信的桥梁。 用户写的组件都可以称为RX组件,RX组件采用的语法和生命周期都等同于React,可以认为RX是类React的框架。 要了解RX,可以先了解React语法。 React 学习与快速入门 如果你还不了解Reac