我可以看到RX适用于Android和UI事件处理。我正在努力查看RX在后端提供的好处。

RX Java是为后端处理而设计的,还是这个概念被采用了太多?

最佳答案

实际上,RxJava最初是为解决服务器端问题而实现的。 react 性扩展源于.NET世界,并由Netflix移植到Java的后端。在被Android采纳之前,RxJava成为服务器端Java编程中的一员。

那时,异步和非阻塞处理被证明可以大大提高服务器性能。一个人可以使用回调来实现这一点,但是回调的组成并不理想,并导致回调 hell 。具有功能调用链接样式的RxJava提供了一个(好的)解决方案,并开始被采用。

然后,它传播到Android以处理网络调用或UI事件。当我在Android上使用和享受它时,我总是发现RxJava在Android上比在服务器上要少。由于总体设计在概念上与其他服务器技术恕我直言更接近,即使我知道从.NET世界一开始就在客户端使用了响应式扩展。而且还因为RxJava在Android中的使用存在缺陷。如果您不跟踪订阅,则很容易泄漏Context。而且,您几乎必须在各处添加.observeOn(AndroidSchedulers.mainThread()),以免您不时忘记并导致崩溃。我敢打赌,这是带领Android团队对Livedata上的Architecture components采取Observer模式的原因。

除了解决回调 hell ,RxJava还为开发人员提供了:

  • 观察者模式:该模式非常适合将数据公开给其他模块。它提供了生产者与消费者之间的契约(Contract),具有定义和标准的行为,终止的处理以及生产者对消费者的控制方式(退订,背压)。当然,您不需要RxJava来实现此模式,但RxJava会将其提升到另一个层次。
  • 错误处理:在异步系统中,错误处理比较棘手。
  • 完整的运算符集:数百个运算符用于转换,过滤和合并流。当您需要执行数据操作并且通常围绕它进行后端操作时,RxJava将您的代码简化为一些标准的显式运算符。

  • 总之,RxJava非常适合后端处理,甚至比Android IMHO更适合。您可以找到更多有关Netflix为什么在Java中实现响应式(Reactive)扩展以及后端here的好处的信息。

    说到服务器端工程师是否需要它,我会说它不是必需的,但是知道它会大大增强您的工具箱。如今,趋势是越来越异步,越来越多的中间件,库和框架仅提供异步API。 Couchbase Java数据库API例如基于RxJava。加上响应式扩展不仅是Java,您还可以在大多数语言中利用这些知识。

    关于rx-java - 服务器端工程师需要RX Java吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49226946/

    10-12 02:51