11

サーブレット コンテナー (または単に HTTP サーバー) 内でリアクティブ ストリームを使用するユースケースを探しています。

Jetty プロジェクトは、 「Jetty はリアクティブですか?」という質問を受け始めています。Java 9 にリアクティブ ストリームを追加するという提案に気付きました。

そのため、非同期サーブレット IO にリアクティブ ストリーム API を使用するいくつかの実験を開始しました。これは十分に興味深いものですが、最も重要な関心事に焦点を当てる実際の使用例がないため、焦点が当てられていません。

誰かが彼らのニーズを満たすために私たちの突堤の実験を指示できるように、共有/説明できる良いユースケースを持っていますか. 私が想像したのは、RS ベースのデータベース パブリッシャーが、途中で変換のために Flow.Processors を使用して、HTTP 応答または Websocket 接続でオブジェクトを送信することです。

4

1 に答える 1

6

実行可能なユース ケースは、マルチパート フォーム データの POST を使用する場合、特にファイルをアップロードする場合です。

Typesafe ConductRプロジェクト (免責事項: 私はそのテクニカル リードです) は、ユーザーがバンドルをロードすると、マルチパート フォーム データを受け取ります。akka-streams/httpを使用します。

ストリームの最初の 2 つの部分を読み取ります。これは、バンドルを書き込むノードを知るために、いくつかのメタ データを宣言する必要があることをプロトコルが指定しているためです。いくつかの検証の後、それらを書き込むノードを決定し、部分的に消費されたストリームを接続します。したがって、バンドルをアップロードするリクエストを受信したノードは、ストリーム全体 (200MB になる可能性があります) を消費して再度書き込む必要はありませんが、どのノードに書き込むかをネゴシエートします。

マルチパート フォーム データの書き出しも、ディスクからソースとしてファイルをストリーミングし、それを http エンドポイント、つまり上記のクライアント側に渡すことができるため、優れたユース ケースです。

両方の使用例の利点は、ネットワーク上でバイトを移動するために必要なメモリの量を最小限に抑え、必要な場所でのみファイル IO を実行することです。

于 2015-11-28T00:03:48.073 に答える