将反应式编程整合到应用程序中的步骤介绍

157 阅读6分钟

反应式编程:将其整合到你的应用程序中的步骤

反应式编程是观察者、观察者和调度者的综合体。在这篇文章中了解更多关于实现反应式编程的信息。

根据维基百科,反应式编程(Rx)"是计算机中处理数据流和变化传播的一种声明式编程方法。这种范式允许用户轻松地指定静态(如数组)或动态(如事件发射器)数据流,以及表明相关执行模型内部存在推断的依赖关系,允许自动传播修改的数据流"。这个词在20世纪60年代首次被用于IT行业,从那时起,关于它的文章就很多了。

不幸的是,正如经常发生的那样,这个新概念迅速引发了一连串的误解,坚持到今天。2014年的 "反应式宣言"引入了 "反应式系统 "及其四个神圣的原则,进一步扭曲了事情。在Rx编程中,数据流由一个组件产生,由Rx库提供的底层结构将这些变化传播给已经注册接受这些数据变化的其他组件。

反应式编程可以用下面的方式描述,以简单地掌握它。

关于反应式编程

反应式编程是观察者、观察者和调度者的混合体。我们将一个接一个地深入探讨。

观察者

简单地说,可观察者只是数据流。可能通过一个线程传输到另一个线程的数据被存储在一个可观察者中。它们基本上在其生命周期内定期或只发送一次数据,这取决于其设置。

有几个操作者可以协助观察者在响应某些事件时发出特定的数据,但我们会在接下来的章节中更详细地研究它们。就目前而言,把观察者视为供应商。它们处理数据并将其发送到系统的其他部分。

观察者

从本质上讲,它们是消费者。观察者消费由观察者发出的数据流,它之前已经注册了观察者。

调度器

这就是线程管理,简而言之。因为我们谈论的是异步编程,所以线程管理就成了一个无解的问题。因此,调度器会指示观察者和观察者使用哪些线程。

什么时候采用反应式编程是合适的?

我们现在明白了为什么要创建反应式编程以及它是什么,但是我们什么时候使用它呢?当处理异步数据流时,它是一个流行的选择。即使是用例中的一个小变化,也可能成为我们决定的决定性因素。

下面是在现实世界中使用反应式编程的一些例子。

使用反应式编程来开发移动应用

由于移动设备不够强大,无法处理繁重的工作,我们经常需要在活动中或任务后从后台线程中更新主线程的用户界面。因此,我们在服务器上执行繁重的工作和复杂的计算。因此,我们需要对网络活动进行异步工作,这就是 反应式编程发挥作用的地方

在Netflix API中与RxJava一起使用反应式编程

为了成功减少网络定期互动,需要在Netflix API中使用RxJava服务器端并发的反应式编程。由于来自设备的每个网络请求都会自动与其他网络请求并行操作,如果服务器不支持并发执行,一个 "重 "的客户端请求可能不会比几个 "轻 "的请求好很多。即使考虑到网络延迟,如果服务器端对一个压缩的 "重 "请求的处理不能达到相同的同步执行程度,它也可能比许多 "轻 "请求要慢。

请访问Netflix强烈推荐的文章以获得更完整的解释。

外部调用服务

底层协议是对外部服务的阻塞和同步调用,因为现在许多后端服务都是RESTful(即使用HTTP)。也许不是明显的FRP地形,但这是一个相当丰富的地面,因为这种服务的开发经常需要与其他服务联系,然后根据第一次调用的结果调用甚至更多的服务。由于有这么多的IO在进行,在提出下一个请求之前,等待一个呼叫的结束可能会导致你可怜的客户在你能做出回应之前就厌恶地放弃了。

因此,优化外部服务调用,特别是跨调用的复杂的依赖关系的协调,是一个聪明的想法。FRP保证了这种活动的逻辑的 "可组合性",使调用服务的开发者更容易编写。

高并发的消息消费者

一个高并发消息处理的消费者是一个典型的企业用例,特别是当它是高度同步的时候。反应式框架喜欢通过测量微基准来吹嘘他们在JVM上每秒能处理多少消息。

这些统计数字非常棒(每秒几千万条消息并不难产生),但它们可能有些偏差:如果他们说他们是在为一个基本的 "for "循环做基准测试,你就不会那么兴奋了。然而,我们不应该太快否定这种努力,而且很明显,当涉及到性能时,所有的贡献都应该被欣然接受。

当涉及到特定种类的高负荷或多用户应用程序时,采用反应式是一个优雅的解决方案。游戏、社交媒体和聊天室是音频和视频的应用(主要是流媒体),但应该记住,在没有真正需要的时候使用反应式技术,会因为增加不必要的复杂性而对应用造成破坏。

集成Rx

要将Rx集成到你的应用程序中,请遵循以下三个简单的步骤:

第1步:制作一个发射数据的可观察对象

just() 是一个函数,它简单地将参数中提供的数据一个一个地发射出来。数据库是可观察的,它发射数据:在这个例子中,它发射字符串。

第2步:制作一个消耗数据的观察者

前面的代码片断中的观察者消耗了由数据库观察者产生的数据。它接收数据并对其进行处理,以及处理错误。

第3步:调节并发性

在最后一步,我们定义我们的并发性调度器。数据库观察者被告知要通过subscribeOn(Schedulers.newThread()) 在后台线程中执行。观察者被告知通过observeOn(AndroidSchedulers.mainThread()) ,在主线程上执行。这是最基本的反应式编程代码。

总结

我们在这篇文章中深入研究了反应式模式的发展趋势,把它们放在现代工作场所中来看待。对于Java虚拟机,有几个正在积极开发的反应式库或框架。它们有很多可比较的能力,但由于反应式编程,它们的兼容性越来越强。