アプリケーション要件に応じて、統合フローは次の場合に完了します。受信または送信のメッセージストリームが完了します。受信ストリームは完了します(つまり、接続が閉じられます)が、送信ストリームは無限です。メソッドを介して選択したポイント。Streamsシグナルはアクティビティを終了するため、接続が開いているかどうかを確認する必要はありません。受信ストリームは完了またはエラー信号を受信し、送信ストリームはキャンセル信号を受信します。ハンドラーの最も基本的な実装は、受信ストリームを処理するものです。次の例は、このような実装を示しています。受信メッセージのストリームにアクセスします。各メッセージで何かをします。メッセージコンテンツを使用するネストされた非同期操作を実行します。受信メッセージのストリームにアクセスします。各メッセージで何かをします。メッセージコンテンツを使用するネストされた非同期操作を実行します。呼び出す必要があります。しないと、データを読み取る前にデータバッファが解放される可能性があります。背景については、データバッファとコーデックを参照してください。次の実装では、受信ストリームと送信ストリームを組み合わせます。受信メッセージストリームを処理します。送信メッセージを作成し、結合されたフローを作成します。受信メッセージストリームを処理します。送信メッセージを作成し、結合されたフローを作成します。次の例に示すように、受信ストリームと送信ストリームは独立しており、完了のためにのみ結合できます。受信メッセージストリームを処理します。送信メッセージを送信します。受信メッセージストリームを処理します。送信メッセージを送信します。WebFluxのバイトバッファーの表現です。参照のSpringコア部分は、データバッファとコーデックのセクションでさらに詳しく説明しています。理解すべき重要な点は、Nettyのような一部のサーバーでは、バイトバッファーがプールされ、参照カウントされ、メモリリークを避けるために消費されたときに解放する必要があるということです。使用する必要があります。WebSocketServiceに委譲します。現在、Reactor、Netty、Tomcat、Jetty、およびUndertowの組み込みサポートがあります。プロパティを公開します。基盤となるWebSocketエンジンで使用可能なWebSocket関連の構成オプションを公開します。次の例では、Tomcatで実行するときにWebSocketオプションを設定します。}}サーバーのアップグレード戦略を確認して、使用可能なオプションを確認してください。現在、TomcatとJettyのみがこのようなオプションを公開しています。プロパティを設定して、URLパターンでCORS設定を指定することもできます。メソッドを使用して結合されます。処理にいくつかの追加機能を備えた標準Javaの拡張であり、Tomcat固有のAPIを利用してバックプレッシャーのメッセージの受信を一時停止します。メソッドを使用できます。実装しており、使用する前に停止および開始する必要があります。すべてのクライアントには、基になるWebSocketクライアントの構成に関連するコンストラクターオプションがあります。ServerWebExchangeのモック実装を提供します。Webリアクティブを参照してください。これらのモック要求および応答オブジェクトに基づいて構築され、HTTPサーバーなしでWebFluxアプリケーションのテストをサポートします。FrameworkのRSocketプロトコルのサポートについて説明します。概要RSocketは、TCP、WebSocket、およびその他のバイトストリームトランスポートを介した多重化された二重通信用のアプリケーションプロトコルであり、次の相互作用モデルのいずれかを使用します。message.最初の接続が確立されると、両側が対称になり、各側が上記の相互作用のいずれかを開始できるため、「クライアント」と「サーバー」の区別が失われます。これが、プロトコルで参加側を「リクエスター」および「レスポンダー」と呼び、上記の相互作用を「リクエストストリーム」または単に「リクエスト」と呼ぶ理由です。RSocketプロトコルの主な機能と利点は次のとおりです。required.大きなメッセージの断片化と再組み立て。キープアライブ(ハートビート)。基づいてトランスポート用に構築されています。Publishersからの信号は、RSocketを介してネットワーク全体に透過的に伝播します。持っているということです。言語の実装や高レベルのフレームワークAPIに関係なく、仕様を読むことをお勧めします。このセクションでは、コンテキストを確立するための簡潔な概要を提供します。フレームをサーバーに送信して接続のパラメーターを設定します。リースセマンティクスを使用してリクエストの数を制限しない限り、リクエストを開始できます。フレームを待つ必要があります。REQUEST_FNFのいずれかを介して要求を開始できます。これらの各フレームは、リクエスターからレスポンダーに1つのメッセージを運びます。フレームを送信します。Channelなどのメッセージのストリームが含まれる場合、レスポンダーはリクエスターからの要求信号を考慮する必要があります。需要はメッセージの数として表されます。フレームで指定されます。フレームを介して通知されます。フレームを介して、個々の要求ではなく、接続全体に関するメタデータ通知も送信できます。メッセージフォーマットRSocketメッセージにはデータとメタデータが含まれます。メタデータは、ルートやセキュリティトークンなどを送信するために使用できます。データとメタデータは異なる形式にすることができます。フレームで宣言され、特定の接続のすべての要求に適用されます。REQUEST_FNFの1つにのみ含まれます。プロトコル拡張機能は、アプリケーションで使用する一般的なメタデータ形式を定義します。--独立してフォーマットされた複数のメタデータエントリ。上に構築されています。Streamsライブラリとして、Reactorはプロトコルの実装作業を簡素化します。使用するのが自然です。JavaのAPIは、意図的に最小限で基本的なものです。otherなど)をより高いレベルの独立した関心事として残しています。使用して、4つの要求対話タイプをモデル化します。契約は対称的に使用されます。実装してリクエストを処理します。これは、徹底的な紹介を意図したものではありません。ほとんどの場合、SpringアプリケーションはそのAPIを直接使用する必要はありません。Springに依存しないRSocketを確認または実験することが重要な場合があります。モジュールには次のものが含まれます。実装、およびRSocketアプリケーションが必要とする可能性が高いProtobufが含まれています。2.2は、WebFluxサーバーでWebSocketを介してRSocketを公開するオプションを含む、TCPまたはWebSocketを介したRSocketサーバーの立ち上げをサポートします。RSocketStrategiesのクライアントサポートと自動構成もあります。BootリファレンスのRSocketセクションを参照してください。5.2はRSocketサポートを提供します。5.2は、RSocketクライアントおよびサーバーと対話するための受信および送信ゲートウェイを提供します。Integrationリファレンスマニュアルを参照してください。GatewayはRSocket接続をサポートしています。RSocket要求を実行するための流れるようなAPIを提供し、低レベルのデータバッファーではなく、データとメタデータのオブジェクトを受け入れて返します。対称的に使用して、クライアントからリクエストを作成したり、サーバーからリクエストを作成したりできます。フレームを準備して送信するとともにサーバーに接続する必要があります。そのためのビルダーを提供します。RSocketFactoryを使用します。これは、デフォルト設定で接続する最も基本的な方法です。.connectWebSocketAndAwait(URI.create("https://example.org:8080/rsocket"))上記は延期されます。フレームをカスタマイズするために以下を提供します。Decoderから派生します。あり、リクエストごとに複数のメタデータ値とMIMEタイプのペアを許可します。通常、両方を変更する必要はありません。フレームのデータとメタデータはオプションです。フレームのコンテンツを処理できます。メタデータは、接続レベルのセキュリティに使用できます。受け入れて、リクエスターを構成します。これを使用して、データおよびメタデータ値の(de)-serializationのエンコーダーおよびデコーダーを提供する必要があります。基本コーデックのみが登録されます。追加すると、次のように登録できるより多くのものにアクセスできます。再利用のために設計されています。いくつかのシナリオでは、たとえば同じアプリケーションのクライアントとサーバーの場合、Spring構成で宣言することをお勧めします。使用して、サーバーからの要求に対するレスポンダーを構成できます。サーバーで使用されているものと同じインフラストラクチャに基づいてクライアント側の応答にアノテーション付きハンドラーを使用できますが、次のようにプログラムで登録します。PathPatternRouteMatcherを使用します。メソッドを含むレスポンダーを作成します。静的ファクトリーメソッドを使用して、1つ以上のレスポンダーを登録します。PathPatternRouteMatcherを使用します。メソッドを含むレスポンダーを作成します。静的ファクトリーメソッドを使用して、1つ以上のレスポンダーを登録します。上記は、クライアントレスポンダのプログラムによる登録用に設計されたショートカットにすぎないことに注意してください。Beanとして宣言し、次のように適用できます。使用して、クライアントレスポンダーを検出するための別の戦略に切り替える必要がある場合もあります。@Controllerに基づいています。これは、クライアントとサーバー、または同じアプリケーション内の複数のクライアントを使用するシナリオで必要です。プログラミングモデルの詳細については、アノテーション付きレスポンダーも参照してください。公開するコールバックを提供します。次のように、そのレベルでオプションを構成できます。サーバーリクエスターサーバーから接続されたクライアントにリクエストを行うことは、サーバーから接続されたクライアントのリクエスターを取得することです。引数をサポートします。これを使用して、接続のリクエスターにアクセスします。フレームのハンドラーであり、リクエストを開始する前に処理する必要があることに注意してください。そのため、最初のリクエストは処理から分離する必要があります。処理とは無関係に、要求を非同期的に開始します。Mono<Void>を返します。処理とは無関係に、要求を非同期的に開始します。サスペンド機能で処理してください。要求クライアントまたはサーバーのリクエスターを取得したら、次のようにリクエストを作成できます。要求メッセージのメタデータに含めるルートを指定します。要求メッセージのデータを提供します。予想される応答を宣言します。要求メッセージのメタデータに含めるルートを指定します。要求メッセージのデータを提供します。予想される応答を宣言します。相互作用タイプは、入力と出力のカーディナリティから暗黙的に決定されます。ほとんどの場合、入力と出力の選択がRSocketインタラクションの種類と、レスポンダーが期待する入力と出力の種類と一致する限り、これについて考える必要はありません。無効な組み合わせの唯一の例は、多対1です。ReactiveAdapterRegistryに登録されている値の他のプロデューサーも受け入れます。メソッドのいずれかを使用することを検討してください。ステップはオプションです。データを送信しないリクエストの場合はスキップします。Encoderでサポートされている場合、追加のメタデータ値を追加できます。メソッドを使用します。メッセージが正常に送信されたことのみを示し、処理されたことを示すものではないことに注意してください。メソッドとして実装できます。メソッドは接続レベルのイベント(セットアップとメタデータプッシュ)を処理します。アノテーション付きのレスポンダーは、サーバー側からの応答とクライアント側からの応答のために対称的にサポートされます。Beanを検出します。次のように接続します。メタデータをサポートしています。別のMIMEタイプに切り替えるか、追加のメタデータMIMEタイプを登録する必要がある場合は、MetadataExtractorを設定できます。インスタンスを設定する必要があります。モジュールが必要になる可能性があります。AntPathMatcherを介したルートのマッチングに使用されます。差し込むことをお勧めします。RSocketルートは階層化できますが、URLパスではありません。両方のルートマッチャーが「.」を使用するように構成されています。URLのようなURLデコードはありません。クライアントレスポンダークライアント側のアノテーション付き応答者は、RSocketRequester.Builderで構成する必要があります。詳細については、クライアントレスポンダーを参照してください。メソッドを次のように使用できます。メソッドは、「locate.radars.within」というルートを持つRequest-Streamインタラクションに応答します。次のメソッド引数を使用するオプションを備えた柔軟なメソッドシグネチャーをサポートしています。説明@Payloadリクエストのペイロード。Fluxなどの非同期タイプの具体的な値になります。payload.RSocketRequesterリモートの終了を要求するためのリクエスター。@DestinationVariableマッピングパターンの変数に基づいてルートから抽出された値。@MessageMapping("find.radar.{id}")@HeaderMetadataExtractorで説明されている抽出のために登録されたメタデータ値。Object>MetadataExtractorに従って、抽出のために登録されたすべてのメタデータ値。戻り値は、応答ペイロードとして直列化される1つ以上のオブジェクトであると予想されます。Mono<Void>などの値のない非同期タイプのいずれかです。引数)と出力のカーディナリティから決定されます。カーディナリティは次のことを意味します。Mono<T>などの単一値の非同期タイプのいずれか。多Flux<T>などの複数値非同期タイプ。引数がないことを意味します。Mono<Void>などの値のない非同期タイプです。以下の表は、すべての入力および出力カーディナリティーの組み合わせと、対応する相互作用タイプを示しています。介して通知をプッシュします。フレームからのメタデータとデータに基づいています。メタデータにルートを持つ特定の接続に処理を絞り込むパターンを設定できます。パターンが宣言されていない場合は、すべての接続が一致します。使用して宣言する必要があります。新しい接続に対して処理がエラーを返した場合、接続は拒否されます。要求を行うために、処理を遅らせてはなりません。詳細については、サーバーリクエスターを参照してください。MetadataExtractor応答者はメタデータを解釈する必要があります。それぞれ独自のMIMEタイプを使用して、個別にフォーマットされたメタデータ値(ルーティング、セキュリティ、トレースなど)を使用できます。アプリケーションには、サポートするメタデータMIMEタイプを構成する方法と、抽出された値にアクセスする方法が必要です。直列化されたメタデータを取得し、デコードされた名前と値のペアを返す契約です。介してアクセスできます。インスタンスを与えて、メタデータをデコードできます。デコードして「ルート」キーに保存します。提供して、MIMEタイプを次のように登録する必要があります。"foo")複合メタデータは、独立したメタデータ値を組み合わせるのに適しています。リクエスターは複合メタデータをサポートしていないか、使用しないことを選択する場合があります。デコードされた値を出力マップにマップするカスタムロジックを必要とする場合があります。JSONがメタデータに使用される例を次に示します。構成済みのデコーダーを使用して抽出プログラムを作成させ、コールバックを使用して登録を次のようにカスタマイズできます。依存し、それを内部的に使用して非同期ロジックを構成し、リアクティブストリームのサポートを提供します。実装を入力として寛容に受け入れます。使用は、カーディナリティーの表現に役立つため重要です。単一または複数の非同期値が予想されるかどうか、および決定(たとえば、HTTPメッセージのエンコードまたはデコード時)に不可欠です。アノテーション付きコントローラーの場合、WebFluxはアプリケーションが選択したリアクティブライブラリに透過的に適応します。助けを借りて行われます。リアクティブライブラリおよびその他の非同期タイプのプラグ可能なサポートを提供します。CompletableFutureのサポートが組み込まれていますが、他のユーザーも登録できます。JSONメッセージライターは複数の値を予期します。application/json+streamなど)を意味する場合、値は個別に書き込まれ、フラッシュされます。それ以外の場合、値はリストにバッファリングされ、JSON配列としてレンダリングされます。