web-dev-qa-db-ja.com

vert.xとRxJavaの違い

私たちは、プロジェクトの1つに対応するリアクティブプログラミングフレームワークを評価しています。私はちょうどvert.xのチュートリアルを行いました。 RxJavaのプレゼンテーションを少し確認しました。 RxJavaはCompletableFutureにより近いように見えました。しかし、基本的なパターンにもかかわらず、RxJavaとVert.xの両方が非ブロッキングプログラミングへのアクセスを提供します。それらの違いは何なのか混乱しています。この点で私は助けに感謝します。

17
user3276247

VertXは非同期サーバー用のサーバーフレームワークであり、RxJavaは非同期計算用のフレームワークです。 VertXはRxJavaをサポートしており、多くが一緒に使用しています。

Webアプリケーションを作成し、スケーラブルなバックエンドが必要な場合は、VertXを使用します。RxJavaも使用できます。ただし、別のプラットフォームを使用している場合は、RxJavaを使用してください。

VertXとRxJavaの併用についての詳細は Vert.x API for RxJava をご覧ください。

27
Jonas

自分のサイトから:

Eclipse Vert.xは、JVM上で反応型アプリケーションを構築するためのツールキットです。

非同期ネットワークアプリケーションを作成するための基本的なAPIを定義します(例:db接続、監視、認証、サービス検出、クラスタリングなど)。

内部的には、JVM用の高性能非同期ネットワークライブラリであるNettyプロジェクトに基づいています。ただし、これは、推論するのが簡単でありながら高いパフォーマンスのAPIを提供します。

Vert.xコールバックベースのAPIを排他的に使用できますが、Vert.xは、内部でRxJavaを使用して同等のRxified APIも実装します。これは、RxJavaアプリケーション内にVert.xモジュールを統合するための優れたプラットフォームを提供します。

Vert.xは、Kotlin、Groovy、Ruby、Scala、Ceylonなど、他の多くのJVMベースの言語APIをサポートするため、ポリグロットです。さらに、Vert.xはイベント駆動型でメッセージベースであるため、フロントエンドとバックエンドの統合に非常に役立つJavaScript APIも提供します。

Vert.xは、ビジネスロジックが実装されているハンドラーに支えられた、滑らかなHTTPエンドポイントとルート構成を提供します。しかし、実際の神経系は、すべてのVert.xローカルまたは分散コンポーネントへの通信プロバイダーとして機能するイベントバスです。

このまさにイベントバスは以下をサポートします:

  1. ポイントツーポイント、リクエスト/レスポンス、およびpub-subメッセージング
  2. 同じJVMインスタンス内のポリグロットバーティクル間の通信
  3. 複数のJVMインスタンス内のポリグロットバーティクル間のクラスター化された通信
  4. 他のアプリケーションとの統合のためのStompまたはAMQP実装へのブリッジ
  5. Javascriptフロントエンドと直接統合するためのSockJSへのブリッジ

イベントバスは以下によってサポートされています:

  1. より高いレベルのAPIアクセスを通じて分散型のマップ、ロック、およびカウンターを提供するHazelcast、InfiniSpan、Ignite、ZooKeeperなどのクラスターマネージャー

  2. Vert.xサービスディスカバリーAPIは、基礎となる複雑なアドレス指定スキームにアドレスベースの抽象化を提供します

  3. SSL対応TCP双方向の安全な通信と最大のパフォーマンスのためのサービスアクセスポイント

最後に、Vert.xを単独で使用して本格的なアプリケーションを開発するか、SpringBoot、Fibersなどのフレームワークと共同で使用できます。

詳細 ここここ および ここ

お役に立てれば、

Softjake

6
softjake

Vert.xは、まとめてツールキットと呼ばれるモジュールと拡張機能の集まりです。コアモジュールには、Verticleと呼ばれるWebサーバーと同時実行モデルが含まれています。 RxJavaはJava ReactiveXの実装です。どちらもイベント駆動の原則に基づいていますが、WebサーバーはRxJavaに匹敵しません。

だから私はここでの基礎となる比較はVerticle vs RxJavaの間だと思います。

Verticleは、イベントバスを介さない限り、外部から状態に完全にアクセスできないクラスです。そのため、メッセージは単一のスレッド方式で順番に受信され、キューに入れられ、ポップされます。アイデアは、Javaの悪名高いロックメカニズムに対処する必要なく、スレッドセーフな環境を作成することです。同時実行の専門用語でも、このような構造はアクターとして知られています。

使用する場合:Javaのsynchronizedブロックを使用する必要がある場合。複数のスレッドがクラス変数a.k.aの競合状態にアクセスする必要がある状況では、VerticleまたはActorの同期をドロップできます。また、Vert.xでは、Webサーバーを実行せずにVerticleを使用できます。

説明するにはRxJava Java 8と考えてください。これは、mapfilterZipなど。RxJavaの使用例は、ストリームが非同期の場合です。

使用する場合:ストリームを操作する場合。たとえば、ムービーストリームのフレームを別のストリームの字幕と一致させる(RxJavaはNetflixによって作成されました)。または、いくつかの株式相場ティッカーからリアルタイム分析を行います。

3
inmyth