【发布时间】:2017-10-24 09:29:24
【问题描述】:
我们正在为我们的一个项目评估反应式编程框架。我刚刚浏览了 vert.x 教程。我检查了 RxJava 演示文稿。 RxJava 似乎更接近 CompletableFuture。但是,尽管有底层模式,RxJava 和 Vert.x 都可以访问非阻塞编程。我很困惑他们之间有什么区别。我将不胜感激这方面的任何帮助。
【问题讨论】:
我们正在为我们的一个项目评估反应式编程框架。我刚刚浏览了 vert.x 教程。我检查了 RxJava 演示文稿。 RxJava 似乎更接近 CompletableFuture。但是,尽管有底层模式,RxJava 和 Vert.x 都可以访问非阻塞编程。我很困惑他们之间有什么区别。我将不胜感激这方面的任何帮助。
【问题讨论】:
VertX 是用于异步服务器的服务器框架,而 RxJava 是用于异步计算的框架。 VertX 支持 RxJava,很多人一起使用它们。
如果您要创建 Web 应用程序并想要一个可扩展的后端,请使用 VertX,可能与 RxJava 一起使用。但是如果你在另一个平台上,就使用 RxJava。
阅读更多关于同时使用 VertX 和 RxJava 的信息,请访问 Vert.x API for RxJava
【讨论】:
来自他们自己的网站:
Eclipse Vert.x 是一个用于在 JVM 上构建反应式应用程序的工具包。
它定义了编写异步网络应用程序的基本 API(例如:数据库连接、监控、身份验证、服务发现、集群等)
在内部,它基于 Netty 项目,一个用于 JVM 的高性能异步网络库。但是,它提供了更易于推理且仍然具有高性能的高级 API。
您可以专门使用 Vert.x 基于回调的 API,但 Vert.x 还使用 RxJava 在后台实现了等效的 Rxified API。这为在 RxJava 应用程序中集成 Vert.x 模块提供了一个很好的平台。
Vert.x 是多语言的,因为它支持许多其他基于 JVM 的语言 API,例如 Kotlin、Groovy、Ruby、Scala 和 Ceylon。此外,由于 Vert.x 是事件驱动和基于消息的,它还提供了一个非常有用的 JavaScript API 来集成前端和后端。
Vert.x 提供流畅的 HTTP 端点和由实现业务逻辑的处理程序支持的路由配置。但真正的神经系统是充当所有 Vert.x 本地或分布式组件的电信提供商的事件总线。
这个事件总线支持:
事件总线支持:
集群管理器,例如 Hazelcast、InfiniSpan、Ignite 或 ZooKeeper,通过更高级别的 API 访问提供分布式地图、锁和计数器
Vert.x 服务发现 API 为底层复杂寻址方案提供基于地址的抽象
支持 SSL 的 TCP 服务访问点,用于双向安全通信和最高性能
最后,Vert.x 可以单独用于开发成熟的应用程序,也可以与 SpringBoot、Fibers 等框架协同使用。
希望这会有所帮助,
软蛋
【讨论】:
Vert.x 是一堆模块和扩展,统称为工具包。核心模块包含 Web 服务器和称为 Verticle 的并发模型。 RxJava 是 ReactiveX 的 Java 实现。两者都基于事件驱动的原则,但 Web 服务器无法与 RxJava 相提并论。
所以我猜这里的基本比较是在 Verticle 与 RxJava 之间。
Verticle 是一个类,它的状态除了通过事件总线外完全无法从外部访问。因此,消息以单线程方式依次传入、排队和弹出。这个想法是创建一个线程安全的环境,而不必处理 Java 臭名昭著的锁定机制。同样在并发术语中,这种结构称为 Actor。
何时使用:当您需要使用 Java 的 synchronized 块时。多个线程需要访问类变量(也就是竞态条件)的情况是您可以删除 Verticle 或 Actor 的同步。在 Vert.x 中,您可以在不运行 Web 服务器的情况下使用 Verticle。
为了解释 RxJava,想想 Java 8 Stream,它在集合上引入了流和高阶函数,如 map、filter、zip 等。 RxJava 的用例是流是异步的。
何时使用:当您想要操作流时。例如,将电影流中的帧与另一个流中的字幕匹配(毕竟 RxJava 是由 Netflix 创建的)。或者从几个股票市场行情中进行实时分析。
【讨论】: