我承认这篇文章有标题党的嫌疑,看完这篇文章并不会让你月薪两万 。如果想月薪两万甚至更多,并不是靠一篇文章,一本书,一个项目来实现的 。
但是一个合格的程序员对响应式编程多少都应该有些了解,甚至有个清楚的认识 。
希望这篇文章能够让你对响应式编程有个基本的认识,以及响应式编程会带来哪些好处,解决哪些问题,或者说为什么响应式编程如此重要 。
响应式编程发展过程响应式编程的概念是微软最开始提出并且在.net平台上实现的一个库 。后来这个模型被大家接受并认可,ReactiveX 就实现了很多其它语言对应的库,大名鼎鼎的RXJAVA就是针对Java语言实现的 。
后来ReactiveX 和 Reactor共同制定了Reactive Stream标准,ReactiveX和Reactor都是在这个标准下实现的框架 。Spring5 正式引入Reactor 并基于该框架实现了WEB-FLUX 。
此外Java8引进了Stream流以及lamada表达式,Java9引入了Flow,也是对响应式编程的一种支持 。
什么是响应式编程
reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change这是维基百科对响应式编程给出的定义 。我对这个定义的评价是,懂得自然懂,不懂的还是不懂 。
我提炼一下这个定义的关键词 声明式,数据流, 传递变化(响应),我自己再给加一个异步,因为实际上生产级别代码都是进行异步响应的,几乎很少进行同步响应 。
在具体介绍响应式编程之前,先简单解释一下这几个关键词的含义 。
声明式编程声明式和指令式对应 。指令式大家比较熟悉,就是依次写出完成某个任务的每条指令 。
比如从一个苹果列表里,找出所有红色的苹果,指令式编程是这样做的 。
List<Apple> apples = new ArrayList<Apple>();for (Apple apple : apples){if (apple.getColor() == "red"){System.out.println(apple);}}
声明式编程,只要写出你想要什么就OK了 。典型的声明式语言的就是sql,对应上面的找红色苹果的需求,应该是这样的 select * from apple where color = red 。
简单的讲,声明式编程就是聊天式编程,和计算机说你想要什么就OK了 。
数据流再说说数据流,其实数据流可以把它想象成水流,里面流淌的是数据,事件,信号等内容 。如果大家对Java8引入的Stream流有一定了解的话,就会好理解 。如果不了解的可以通过我这篇文章做个入门 。
传递变化(响应)传递变化(响应),其实就是对响应二字的体现 。所谓的响应就是你和某个人打了招呼,然后某人回应你了 。某人对你的回应就是响应 。
将上面的场景对应到面向对象的编程里面,就是观察者(订阅)模式 。观察者对被观察者的某些行为做出对应的动作 。
有些前端程序员对观察者模式可能比较陌生,那么大家比较熟悉的Ajax回调函数也是响应式编程的一种体现,比如如下JS代码
$.ajax("example.action").done(function(){console.log("success")}).fail(function(){console.log("error")}).always(function(){console.log("complete")});
这就是典型的异步回调,当请求成功的时候会有一种响应动作,请求失败的时候会有另一种响应动作 。异步关于响应的方式,有同步响应和异步响应 。实际应用中大部分都会采用异步响应 。
同步:你给旅行社打电话预定一张机票,接线员接到你的电话后,开始查询航班信息,然后进行预订,这期间你一直拿着电话等他的结果 。
异步:你给旅行社打电话预定一张机票,接线员接到电话后,记录下你要预定的航班信息,然后就挂掉电话 。等他预定好之后,把预定结果打电话告诉你 。这就是异步 。
很明显异步操作对你来说效率更高,因为你不用一直等接线员的操作,你可以干其他事情 。
上面的场景也被很多人称为好莱坞规则 。很多好演员去好莱坞报名拍戏,经纪公司会登记下演员的姓名,等有合适的机会的时候,经纪公司会给演员打电话,而不用演员一直在现场等,或者不断的给经纪公司打电话询问 。 don't call me I will call you 。
小试牛刀其实介绍完上面那些东西,可能对响应式编程的理解还是模糊的 。那么我们就以Reactor框架为例子做一个简单的说明 。毕竟程序员都喜欢show me the code 。
上面提到了响应式编程的核心是基于观察者(订阅)模式的 。观察者观察被观察者的行为,根据不同的行为做出不同的响应行为 。
推荐阅读
- iPhone手机|“月薪三千能买什么样的手机”上热搜 投票第一竟是苹果?
- 程序员,一个容易被误解的职业
- 商城类网站mssql数据库表结构设计,后台程序员可参考
- 做华为认证工程师有前途吗?待遇怎么样?月薪一般多少钱呢?
- 程序员的核心竞争力
- 程序员的工作,可以干一辈子吗?
- 对前端、后端和全栈感兴趣的人,建议都看看!18年老程序员忠告
- 这些一直霸榜的程序员书你知道是哪几本吗?每本豆瓣评分8.0以上
- 招聘|这3大行业月薪高达万元,待遇好却很“缺人”,没工作的可以试试
- 一个设置让你的电脑网速和程序员的网速一样快