RxJS/RxJava——初探响应式编程

参考:https://zhuanlan.zhihu.com/p/27678951 知乎:响应式编程

响应式编程是一种基于异步数据流概念的编程模式。
响应式编程的关键概念:事件
设计模式:观察者模式

响应式编程

  • 响应式: 快速/一致的响应时间。无论并发操作多少,都尽量控制在一定时间内。
  • 韧性: 其实就是隔绝,避免连锁性问题的发生。
  • 弹性: 可扩展。
  • 消息驱动: 异步/松耦合/隔绝/地址透明/错误作为消息/背压/无阻塞。

错误作为消息:在Java中,通常将错误直接作为异常抛出,而在响应式编程中,错误也是一种消息,和普通消息地位一致。
背压:当上游向下游推送数据时,可能下游承受能力不足导致问题。

同步和异步

分布式网络系统中,各个参与方节点的运行是相互独立的,没有共享内存,没有全局时钟。各节点通过消息来进行沟通。在传统的理念中,我们会把这样的网络根据他们通信方式描述成同步和异步的。

回到编程:编程也可以分为同步和异步,同步编程就是发出任务,等待执行。异步编程是发出一个任务,不等待结果,就继续发出下一个任务。发完了,当然要接收反馈了,也就是去获取任务执行结果,我们可以使用两种方式去获得结果,一个是主动轮询(Proactive),一个是被动接收反馈(Reactive)。
异步编程不用去等结果,如果他依赖那个结果对象的话,那么他只要定期去问一下就好了 ,或者再开一个线程去专门接收它。那不就不会阻塞了?

过渡到响应式编程

上面提到了异步编程,我们使用两种方式去拿结果,好了,Reactive,被动接收反馈,在这种方式下,上一个任务的结果反馈就是一个事件,这个事件来触发下一个任务执行。

部分术语

  • 依赖链: 就是你发生什么事情是要基于什么事发生后的,比如 睡觉 -> 吃饭 ->饿了
    Reactive 方式是现有事件触发,然后你就根据事件找到响应方,然后响应方处理了。

总结: 所以响应式编程就是如何编写关于怎么响应事件的编程模式,事件包括但不限于用户输入、数据流、系统状态变换。

观察者模式

观察者设计模式定义了对象间的一对多组合关系,即当一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。

RxJS

举例: 实现Who to follow 推荐界面

  • 启动时从api加载账户数据,并显示推荐;
  • 点击refresh,加载另外3个推荐用户;
  • 点击'x',清除当前推荐,显示新推荐;
  • 每行都显示头像和他们的主页链接;

Rx的解决方式
在Rx中,所有的东西都可以转换为一个Stream。在Rx中,官方把一个Stream称作“Observable”
1、 发送请求、收到响应、渲染响应;(使用Stream代表请求)

var requestStream = Rx.Observable.just('https://api.github.com/user');

这步就是一个包含String的Stream,没有其他操作,我们需要映射它,所以需要subscribing这个Stream。

requestStream.subscribe(function(requestUrl){
jQuery.getJSON(requestUrl,function(responseData){
    //
});
}

Rx 可以用来处理异步Data stream。那么请求的响应就也可以当作一个包含将会到达的数据的stream

requestStream.subscribe(function(requestUrl) {
    // execute the request
    var responseStream = Rx.Observable.create(function (observer) {
        jQuery.getJSON(requestUrl)
        .done(function(response) { observer.onNext(response); })
        .fail(function(jqXHR, status, error) { observer.onError(error); })
        .always(function() { observer.onCompleted(); });
    });

    responseStream.subscribe(function(response) {
        // do something with the response
    });
    } 
全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务