文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-01 16:27

关注

审校 | 孙淑娟

早在上世纪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内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯