インターフェース WebSocketHandler
- すべての既知の実装クラス:
ContextWebSocketHandler
public interface WebSocketHandler
WebSocket メッセージのハンドラーです。以下のように使用できます。
- サーバー側では、
WebSocketHandlerはSimpleUrlHandlerMappingおよびWebSocketHandlerAdapterを含むリクエストにマップされます。 - クライアント側では、
WebSocketHandlerがWebSocketClient実行メソッドに渡されます。
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
メソッドのサマリー
修飾子と型メソッド説明このハンドラーでサポートされているサブプロトコルのリストを返します。reactor.core.publisher.Mono<VoidSE>handle(WebSocketSession session) 新しい WebSocket 接続が確立されたときに呼び出され、セッションの処理を許可します。
メソッドの詳細
getSubProtocols
このハンドラーでサポートされているサブプロトコルのリストを返します。デフォルトでは、空のリストが返されます。
handle
新しい WebSocket 接続が確立されたときに呼び出され、セッションの処理を許可します。セッションの処理方法の詳細と例については、クラスレベルのドキュメントとリファレンスマニュアルを参照してください。
- パラメーター:
session- 処理するセッション- 戻り値:
- セッションのアプリケーション処理がいつ完了するかを示します。これは、受信メッセージストリームの完了(つまり、接続の終了)と、場合によっては送信メッセージストリームの完了とメッセージの書き込みを反映する必要があります。