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
    });
    } 
全部评论

相关推荐

07-25 11:26
清华大学 Java
打开电脑,思绪又回到了7月份刚开始的时候,感觉这个月过的如梦如幻,发生了太多事,也算是丰富了我本就是平淡的人生吧太早独立的我习惯了一切都是自己做决定,拥有绝对的决定权,而且永远不会听取别人的建议。我就是那个恋爱四年出轨的男主啦,感觉既然在牛客开了这个头,那我就要做个有始有终的人。从我出轨到结束再到和女朋友和好如初真的太像一场梦了,短短的一个月我经历了太多,也成长了很多,放下了那些本就不属于我的,找回了那些我不该放弃的。我的人生丰富且多彩,但人不能一直顺,上天总会让你的生活中出点乱子,有好有坏,让你学会一些东西,让你有成长。我和女朋友的恋爱四年太过于平淡,日常除了会制造一些小浪漫之外,我们的生活...
段哥亡命职场:不得不说,我是理解你的,你能发出来足见你是个坦诚的人,至少敢于直面自己的内心和过往的过错。 这个世界没有想象中那样非黑即白,无论是农村还是城市,在看不见的阴影里,多的是这样的事。 更多的人选择站在制高点去谩骂,一方面是社会的道德是需要制高点的,另一方面,很多人不经他人苦,却劝他人善。 大部分的我们,连自己生命的意义尚且不能明晰,道德、法律、困境,众多因果交织,人会迷失在其中,只有真的走出来之后才能看明白,可是没走出来的时候呢?谁又能保证自己能走的好,走的对呢? 可是这种问题有些人是遇不到的,不去追寻,不去探寻,也就没了这些烦恼,我总说人生的意义在过程里,没了目标也就没了过程。 限于篇幅,没法完全言明,总之,这世界是个巨大的草台班子,没什么过不去了,勇敢面对,革故鼎新才是正确,祝你早日走出来。查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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