3.Introduction to Reactive Programming
Source:projectreactor.io/docs/core/r…
Note:内容较多,分小章节进行翻译及学习
Reactor是Reactive编程范式的一种实现,可以总结为:
Reactive 编程是一种异步编程,关心数据流和change的传递。它可以轻松表达静态数据流(如 arrays)和动态数据流(如 event emitters)
Microsoft在.NET生态中创造了Reactive Extension(RX)库,这是第一个Reactive编程范式的实现。接着,RxJava在JVM上实现了Reactive编程。随着时间发展,通过Reactive Stream的努力,对Java上Reactive编程做了规范化,定义一些列的interface和交互规则。它的interface已经集成到Java9的Flow类下。
Reactive编程经常出现在面向对象的编程语言中,作为观察者设计模式的扩展。你还可以将核心的Reactive stream模式和Iterator设计模式进行比较,两者有着明显的区别,例如,当Iterator是拉数据,Reactive stream是推数据。
Iterator属于一种命令式编程模式,Iterable可以访问其中数据,实际上,何时去访问下一个数据取决于开发者。在Reactive streams中,与之相对应是Publisher-Subscriber,但是是由Publisher来通知Subscrriber新数据的到来,这种推的概念就是成为Reactive的关键。另外,在推送的数据上的operations是通过声明表现的而不是命令式:编程者表达计算处理的逻辑而不是详细描述控制流。
除了推送数据,Reactive 编程对执行出错和执行正常完成这种行为进行了定义。Publisher可以向Subscriber推送数据,通过调用onNext方法,也可以提示错误,通过调用onError方法或者提示完成,通过调用onComplete方法。错误和执行完成都会终止sequence。可以将该过程描述为:
onNext x 0..N [onError | onComplete]
这种方式是非常灵活的。可以是没有数据,也可以只有一个数据,也可以N个数据(包括无限的数据序列,例如,时长持续的滴答声)
但是我们首先要弄清为什么我们需要这么一个异步Reactive库。