インターフェース WebSocketHandler

すべての既知の実装クラス:
ContextWebSocketHandler

public interface WebSocketHandler
WebSocket メッセージのハンドラーです。以下のように使用できます。

session.receive() は受信メッセージを処理し、session.send は送信メッセージを送信します。以下は、受信メッセージの処理とすべてのメッセージへの応答の例です。

        class ExampleHandler implements WebSocketHandler {

                @Override
                public Mono<Void> handle(WebSocketSession session) {
                        Flux<WebSocketMessage> output = session.receive()
                                .doOnNext(message -> {
                                        // Imperative calls without a return value:
                                        // perform access checks, log, validate, update metrics.
                                        // ...
                                })
                                .concatMap(message -> {
                                        // Async, non-blocking calls:
                                        // parse messages, call a database, make remote calls.
                                        // Return the same message, or a transformed value
                                        // ...
                                });
                        return session.send(output);
                }
        }
 

受信メッセージの処理と送信メッセージの送信が独立したストリームである場合、"zip" 演算子で結合できます。

        class ExampleHandler implements WebSocketHandler {

                @Override
                public Mono<Void> handle(WebSocketSession session) {

                        Mono<Void> input = session.receive()
                                .doOnNext(message -> {
                                        // ...
                                })
                                .concatMap(message -> {
                                        // ...
                                })
                                .then();

                        Flux<String> source = ... ;
                        Mono<Void> output = session.send(source.map(session::textMessage));

                        return Mono.zip(input, output).then();
                }
        }
 

WebSocketHandler は、受信ストリームと送信ストリームを統合フローに構成し、そのフローの完了を反映する Mono<Void> を返す必要があります。つまり、Reactive Streams シグナルはアクティビティを終了するため、接続が開いているかどうかを確認する必要はありません。受信ストリームは完了 / エラーシグナルを受信し、送信ストリームはキャンセルシグナルを受信します。

導入:
5.0
作成者:
Rossen Stoyanchev
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    default ListSE<StringSE>
    このハンドラーでサポートされているサブプロトコルのリストを返します。
    reactor.core.publisher.Mono<VoidSE>
    新しい WebSocket 接続が確立されたときに呼び出され、セッションの処理を許可します。
  • メソッドの詳細

    • getSubProtocols

      default ListSE<StringSE> getSubProtocols()
      このハンドラーでサポートされているサブプロトコルのリストを返します。

      デフォルトでは、空のリストが返されます。

    • handle

      reactor.core.publisher.Mono<VoidSE> handle(WebSocketSession session)
      新しい WebSocket 接続が確立されたときに呼び出され、セッションの処理を許可します。

      セッションの処理方法の詳細と例については、クラスレベルのドキュメントとリファレンスマニュアルを参照してください。

      パラメーター:
      session - 処理するセッション
      戻り値:
      セッションのアプリケーション処理がいつ完了するかを示します。これは、受信メッセージストリームの完了(つまり、接続の終了)と、場合によっては送信メッセージストリームの完了とメッセージの書き込みを反映する必要があります。