【问题标题】:Difference between vert.x and RxJavavert.x 和 RxJava 的区别
【发布时间】:2017-10-24 09:29:24
【问题描述】:

我们正在为我们的一个项目评估反应式编程框架。我刚刚浏览了 vert.x 教程。我检查了 RxJava 演示文稿。 RxJava 似乎更接近 CompletableFuture。但是,尽管有底层模式,RxJava 和 Vert.x 都可以访问非阻塞编程。我很困惑他们之间有什么区别。我将不胜感激这方面的任何帮助。

【问题讨论】:

    标签: rx-java vert.x


    【解决方案1】:

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

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

    阅读更多关于同时使用 VertX 和 RxJava 的信息,请访问 Vert.x API for RxJava

    【讨论】:

    • 你指的是异步服务器吗?
    • 不,verticles 更像是模块
    • 好的。那么什么将构成 vert.x 中的异步服务器?
    • Vert.x 是一个事件驱动的服务器,类似于 Node.js,旨在异步执行所有操作。如果您不使用 Vert.x(或 Node.js)进行异步编码,您将无法从事件驱动服务器中获益。
    【解决方案2】:

    来自他们自己的网站:

    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 本地或分布式组件的电信提供商的事件总线。

    这个事件总线支持:

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

    事件总线支持:

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

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

    3. 支持 SSL 的 TCP 服务访问点,用于双向安全通信和最高性能

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

    更多详情hereherehere

    希望这会有所帮助,

    软蛋

    【讨论】:

      【解决方案3】:

      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,它在集合上引入了流和高阶函数,如 mapfilterzip 等。 RxJava 的用例是流是异步的。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-14
        • 1970-01-01
        • 2016-05-21
        • 2017-01-25
        • 2023-01-26
        • 2015-03-26
        • 2015-02-16
        • 1970-01-01
        相关资源
        最近更新 更多