public interface WebSocketHandler
サーバー WebSocketHandler
は、SimpleUrlHandlerMapping
および WebSocketHandlerAdapter
を使用するリクエストにマップされます。クライアント WebSocketHandler
が WebSocketClient
実行メソッドに渡されます。
session.receive()
を使用して受信メッセージストリームを作成し、session.send(publisher)
を使用して送信メッセージストリームを作成します。以下は、受信を処理し、送信メッセージを送信するための組み合わせフローの例です。
class ExampleHandler implements WebSocketHandler { @Override public Mono<Void> handle(WebSocketSession session) { Flux<WebSocketMessage> output = session.receive() .doOnNext(message -> { // ... }) .concatMap(message -> { // ... }) .map(value -> session.textMessage("Echo " + 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 信号はアクティビティを終了するため、接続が開いているかどうかを確認する必要はありません。受信ストリームは完了 / エラー信号を受信し、送信ストリームはキャンセル信号を受信します。
修飾子と型 | メソッドと説明 |
---|---|
default ListSE<StringSE> | getSubProtocols() このハンドラーでサポートされているサブプロトコルのリストを返します。 |
reactor.core.publisher.Mono<VoidSE> | handle(WebSocketSession session) 新しい WebSocket 接続が確立されたときに呼び出され、セッションの処理を許可します。 |
default ListSE<StringSE> getSubProtocols()
デフォルトでは、空のリストが返されます。
reactor.core.publisher.Mono<VoidSE> handle(WebSocketSession session)
セッションの処理方法の詳細と例については、クラスレベルのドキュメントとリファレンスを参照してください。
session
- 処理するセッション