vert.x和RxJava之间的区别

22

我们正在为我们的一个项目评估响应式编程框架。我刚刚完成了vert.x的教程。我稍微查看了一下RxJava的介绍,RxJava似乎更接近于CompletableFuture。但是尽管有着不同的底层模式,无论是RxJava还是Vert.x都可以访问非阻塞编程。我对它们之间的区别感到困惑。如果有任何帮助,我将不胜感激。

3个回答

32

VertX是一种用于异步服务器的服务器框架,而RxJava是一种用于异步计算的框架。VertX支持RxJava,并且许多人将它们一起使用。

如果您要创建一个Web应用程序并想要可扩展的后端,请使用VertX,可能还要使用RxJava。但是如果您在另一个平台上,则只需使用RxJava。

有关在Vert.x API for RxJava中一起使用VertX和RxJava的更多信息。


你是指将 verticles 视为异步服务器吗? - user3276247
不,"verticles" 更像是模块。 - Jonas
好的。那么,在 Vert.x 中,什么构成异步服务器? - user3276247
3
Vert.x是一个事件驱动的服务器,类似于Node.js,并且旨在以异步方式完成所有操作。如果您不使用Vert.x(或Node.js)进行异步编码,则无法获得事件驱动服务器的优势。 - Jonas

7

来自他们的网站:

Eclipse Vert.x是用于在JVM上构建反应式应用程序的工具包。

它定义了编写异步网络应用程序的基本API(例如:数据库连接、监视、身份验证、服务发现、集群等)

内部基于Netty项目,这是一个高性能的JVM异步网络库。然而,它提供了一个更高级别的API,易于理解,并且仍然高度可靠。

您可以专门使用Vert.x基于回调的API,但Vert.x还在底层实现了等效的Rxified API,使用RxJava。这为在RxJava应用程序中集成Vert.x模块提供了一个很好的平台。

Vert.x是多语言的,因为它支持许多其他基于JVM的语言API,如Kotlin、Groovy、Ruby、Scala和Ceylon。此外,由于Vert.x是事件驱动和基于消息的,它还提供了一个非常有用的JavaScript API,用于将前端与后端集成。

Vert.x提供流畅的HTTP端点和路由配置,由处理程序支持,在那里实现业务逻辑。但真正的神经系统是事件总线,作为所有Vert.x本地或分布式组件的电信提供商。

这个非常的事件总线支持:

  1. 点对点、请求-响应和发布-订阅消息传递
  2. 在同一个JVM实例中的多语言顶点之间的通信
  3. 在多个JVM实例中的多语言顶点之间进行集群通信
  4. 与其他应用程序集成的Stomp或AMQP实现的桥接
  5. 与JavaScript前端直接集成的SockJS桥接

事件总线由以下支持:

  1. 集群管理器,如Hazelcast、InfiniSpan、Ignite或ZooKeeper,通过更高级的API访问提供分布式映射、锁定和计数器

  2. Vert.x服务发现API,提供基于地址的抽象到底层复杂寻址方案

  3. 支持SSL的TCP服务接入点,用于双向安全通信和最大性能

最后,Vert.x可以单独用于开发完整的应用程序,也可以与SpringBoot、Fibers等框架协作使用。

更多详细信息请点击这里, 这里这里

希望这可以帮到您,

Softjake


7

Vert.x是一个由多个模块和扩展组成的工具包。其中核心模块包含一个名为Verticle的Web服务器和并发模型。RxJava是ReactiveX的Java实现。两者都基于事件驱动的原则,但Web服务器与RxJava不可比较。

因此,我猜想这里的比较对象是Verticle vs RxJava

Verticle是一个类,除了通过事件总线外,其状态无法从外部进行访问。因此,消息以单线程方式顺序进入队列并弹出。这样做的目的是创建一个线程安全的环境,而无需处理Java中臭名昭著的锁定机制。在并发语境下,这种结构也称为Actor。

何时使用:每当需要使用Java的synchronized块时。当多个线程需要访问类变量(即竞态条件)时,您可以将synchronized换成Verticle或Actor。在Vert.x中,您可以在不运行Web服务器的情况下使用Verticle。

要解释RxJava,请考虑Java 8中引入的流式处理(stream)和高阶函数,例如集合上的mapfilterzip等。RxJava的用例是当流是异步的时。

何时使用:当您想要操作流时。例如,将电影流中的帧与另一个流中的字幕匹配(毕竟RxJava是由Netflix创建的)。或从几个股票市场交易记录进行实时分析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接