Netflix 为 MS Open Tech 的响应式扩展(Reactive Extensions)提供了 Java 实现并将之开源。但若说 RxJava 只是针对 Java 的,就会产生误导。它被设计为亦可用于其他 JVM 语言。“目前支持的语言(除了 Java 本身外)包括 Groovy、Clojure、Scala 和 JRuby。”
Netflix 创建了 RxJava 来简化服务器端并发。他们的目标是允许客户端触发单个可在服务器并行执行的“重”客户端请求。 Ben Christensen 和 Jafar Husain 解释道:
服务器端并发可以有效降低网络通信量。如果不能在服务器并发执行,那么单个“重”客户端请求可能不如多个“轻”请求,因为一个设备上的每个网络请求可以天然地和其他网络请求并行执行。如果服务器端执行的某个崩溃的“重”请求没有达到并行执行的要求,那么即使算上节省的网络传输时间,也可能会慢于多个“轻”请求。
根据 Ben 和 Jafar 所说,函数式响应要优于 Future 和回调函数,因为“函数式响应提供了一系列能够对 Observable 进行过滤、选择、转换、联合和组合的操作符,可以进行高效地执行和组合。”
通过让服务层 API 中的所有方法返回 Observable,开发者可以与这些方法的实现隔离开来。这些方法可以在今天异步调用,也可以在明天同步返回。服务方法还可以自由选择阻塞和非阻塞 I/O,前者可在资源受限时使用。
RxJava 支持“Java 5(以支持 Android)和更高版本,最终目标是基于支持 Lambda 的 Java 8 进行构建。”与原始 Rx 一样,Netflix 的 RxJava 也是基于 Apache License。你可以在 github 上下载 RxJava 。
评论