前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >响应式流的生命周期

响应式流的生命周期

作者头像
dhyuan
发布2022-05-30 14:26:58
3140
发布2022-05-30 14:26:58
举报
文章被收录于专栏:响应式编程

这里所说的响应式流的生命周期是说我们从定义响应式流到触发这个流的处理所经历的不同阶段。 总的来说就是三个阶段。组装时、订阅时、运行时。其中组装时是代码的静态表达,订阅时、运行时描述的是响应式流程序运行起来时所设计的逻辑。

组装时

这个阶段就是我们建立处理模型的阶段。基本上是解决了下面三个方面的问题。

1)定义这个 reactive stream 的数据来源是什么。Publisher

这个阶段我们通过使用诸如 just(), range(), fromArray(), push(), create(), generate()等方法来设置数据源头。

2)这个数据流的最终订阅者是谁?Subscriber

我们在最下游 publisher 上通过调用 subscribe()方法把 subscriber 从下游到上游依次传递到最上游的包含数据源的 publisher。

3)数据到达最终订阅者那里时需要做哪些转换、处理?Operator

以上两个调用解决了数据来源于哪里、被谁最终接收的问题。但是在数据从上游被传递到下游的过程中,我们往往需要对数据做各种处理。这个阶段就各种 operator 大显身手的地方,比如 map(), flatMap(), filter(), reduce(), scan(), concatMap(), usingWhen()… … 实际上每经历一个 operator,就生成了一个新的中间级别的 publisher,这就是 reactive stream 的不可变性。

组装时基本就是我们写出的代码定义出的静态逻辑这部分。 程序运行起来,才会进入下面的两个阶段:订阅时、运行时,所以说这两个阶段是程序的动态表现。

订阅时

通过组装时我们定义了什么数据(publisher)经过怎样的处理(operator)最后传递给谁(subscriber)。而订阅时这个阶段,解决的问题是如何把调用下游 publisher 时传入的 subscriber 依次传递给上游的的 publisher。可以想象 Project Reactor 在传递 subscriber 的时候是依次进行封装之后传递的而不会是直接把下游的 subscriber 传递上去,因为以 operator 串联起来的各个 publisher 都需要“自己”的 subscriber。可以体会下这里“Subscriber 链”的概念。 这个传递过程很重要,因为 subscriber 中的 onSubscribe(Subscription s)提供了上游 publisher 把 Subscription 传递给下游 Subscriber 的机制。 因为 Subscriber 只有通过 subsciption 的 request 方法才能启动数据的流动。

运行时

经过组装时、订阅时,数据流已经“一触即发”。我们只要通过上游传递给我们的 Subscription 调用 request()方法就可以触发数据的流动了。 通过在 Subscirberd 的 onSubscription(), onNext()被回调时,向 Subscription 的 request()传入不同的数字,我们分别可以实现拉模型、推模型、拉-推模型。 响应式流的所谓运行时狭义的讲就是这种 Publisher 和 Subscriber 之间的信号交换,广义的讲也包括operator对数据个各种转换、处理。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 响应式编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1)定义这个 reactive stream 的数据来源是什么。Publisher
  • 2)这个数据流的最终订阅者是谁?Subscriber
  • 3)数据到达最终订阅者那里时需要做哪些转换、处理?Operator
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档