响应式编程:集成到应用程序的步骤

译文 精选
开发 前端
响应式编程是observables、observers和scheduler的结合。本文将和您探讨响应式编程的术语,适用场景,以及如何将其代码集成到应用中的基本步骤。

​译者 | 陈峻

审校 | 孙淑娟

早在上世纪60年代, IT领域就首次出现了“响应式编程(reactive programming,Rx)”一词。它在​​维基百科中的定义​​为:在计算机中,处理数据流和传递变更的一种声明式编程方法。这种范式允许用户轻松地指定静态(如,数组)或动态(如,事件发射器)数据流,以及表明相关执行模型内部存在的、已推断出的依赖关系,进而允许自动传递数据流的变更。在Rx编程中,各种数据流由同一个组件生成。各个Rx库提供了底层的结构,并将这些变更传递给已注册的、可接受此类数据变更的其他组件处。

关于响应式编程

总地说来,响应式编程是各种observable、observer和scheduler的结合。下面,我们将对这些术语进行深入解释。

Observable

数据可以通过一个线程被传输到另一个线程,并存储在observable中。简单地说,observable是一种数据流。根据具体设置的不同,数据可以被定期发送,或者在其生命周期内仅发送一次。

一些操作符(operator)可以帮助observer(我们会在下一部分详细介绍到)发出特定的数据,以响应各种事件。您可以暂且把observable视为提供者(supplier)。它们不但会处理数据,而且能够将其发送到系统的其余部分。

Observers

Observer可以被理解为是消费者(consumer)。它们使用之前已注册的observable,发送数据流。

Schedulers

简而言之,在异步编程中,它们轻松地实现了线程管理。scheduler能够指示observable和observer使用哪些线程。

什么时候适合使用响应式编程?

通常,我们在处理异步数据流时,响应式编程是一种流行的选择。毕竟用例中的微小变化也可能成为我们决策的决定性因素。以下便是一些在现实世界中使用响应式编程的示例:

使用响应式编程开发移动应用程序

由于移动设备在性能上不足以处理繁重的任务,因此我们经常需要在执行期间或任务之后,根据后台线程来更新主线程上的用户界面。对此,我们需要在服务器上执行繁重的工作和复杂的计算。可见,对于此类网络通讯活动的异步工作需求,响应式编程正好可以发挥作用。

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

为了减少网络中的常规交互,我们需要使用RxJava服务器端的并发机制,在Netflix API中进行响应式编程。由于来自某个设备的每一个网络请求,都会自动与其他网络请求并行处理,因此如果服务器端无法支持并发执行的话,那么单个“重”的客户端请求,很可能都不如几个“轻”的客户端请求的被处理速度。而且,即使我们已将网络延迟考虑在内,如果一个已压缩的“重”请求服务器端,在处理中没有达到相同程度的并行处理,那么它就可能会比多个“轻”的请求要慢得多。

外部调用服务

由于如今许多后端服务都是RESTful类型(即,它们使用的是HTTP),因此底层协议可能会造成阻塞,以及出现同步调用外部服务的情况。在进行服务开发的时候,我们不但需要经常联络和调用其他的服务,而且要根据第一次调用的结果,按需调用额外更多的服务。因此,在面对众多I/O时,我们需要在发出下一个请求之前,等待前一个调用的完成。而这往往会导致我们的客户,因为丧失服务响应等待的耐心,而放弃后续的使用。

因此,我们有必要优化外部服务的调用,特别是那些针对跨不同调用之间复杂依赖关系的编排。响应式编程能够保障此类活动的背后,在逻辑上的“可组合性”,以便调用服务的开发人员能够更容易地编写相关的代码。

高并发消息的消费者

一种典型的企业用例往往发生在有大量并发消息处理的消费者处,尤其是在那些高度同步的情况下。而响应式框架的优势就在于:通过测量微基准(microbenchmark),实现了每秒都能够在JVM上处理大量的消息。

整合响应式编程

在线游戏、社交媒体和多人聊天室,都是持续使用音频和视频的应用程序(主要被用于流媒体)。而当涉及到特定类型的高负载、或多用户应用时,响应式编程显然是一个优雅的解决方案。不过,响应式技术的引入也可能会增加不必要的复杂性,甚至会给应用程序的性能带来影响。因此,我们需要通过如下三个简单步骤,合理地将响应式程序集成到目标应用中:

第1步:创建一个Data-Emitting类型的Observable

为了让数据库在Observable下,发送字符串型的数据。我们可以通过提供不同的参数,让just()函数能够逐一发送数据。

第2步:创建一个Data-Consuming类型的Observer

前续代码片段中的observer能够使用数据库observable生成的数据。它不但可以接收数据,而且能够处理数据,甚至还可以处理各种错误。

第3步:调节并发性

最后,我们来定义并发的scheduler。程序不但需要通过subscribeOn(Schedulers.newThread()),在后台线程中告知数据库observable去运行;而且需要通过observeOn(AndroidSchedulers.mainThread())在主线程上告知observer去运行。这便是最基本的响应式编程代码。

总结

在上文中我们探讨了响应模式的趋势,以及如何将响应式编程集成到应用程序的步骤。就Java虚拟机而言,目前已有多个响应式代码库或框架正在被研发。它们不但功能全面,而且具有广泛的兼容性。

译者介绍

陈峻 (Julian Chen),51CTO社区编辑,具有十多年的IT项目实施经验,善于对内外部资源与风险实施管控,专注传播网络与信息安全知识与经验;持续以博文、专题和译文等形式,分享前沿技术与新知;经常以线上、线下等方式,开展信息安全类培训与授课。

原文标题:Reactive Programming:The Steps To Integrate It Into Your Application​,作者:Gurpreet Singh​


责任编辑:华轩 来源: 51CTO
相关推荐

2022-06-16 13:08:30

Combine响应式编程订阅

2021-04-30 16:54:27

分散式应用程序

2012-11-01 11:34:31

IBMdw

2010-02-26 14:40:15

Python应用程序

2011-08-10 09:31:33

开发iPhone应用程

2010-02-07 10:25:11

Android

2011-08-10 17:38:21

DB2JDBC

2021-08-12 18:48:31

响应式编程Bio

2012-10-29 09:40:24

云应用集成云计算管理IaaS

2010-08-11 15:48:04

DB2编程

2010-08-11 15:48:04

DB2编程

2009-07-03 06:57:32

2021-08-30 20:19:55

应用程序

2009-06-01 11:37:46

EquinoxOSGi服务器

2022-02-15 09:36:13

容器应用程序云服务

2017-11-10 14:00:39

Riverbed应用程序网络性能

2009-07-29 17:42:47

ibmdwWeb2.0

2009-08-27 11:53:45

ibmdw云计算

2010-12-15 17:22:59

2019-02-14 09:30:40

Ubuntu应用程序UI
点赞
收藏

51CTO技术栈公众号