モジュール java.net.http
パッケージ java.net.http

インタフェースWebSocket.Listener

  • 含まれているインタフェース:
    WebSocket

    public static interface WebSocket.Listener
    WebSocketの受信インタフェース。

    WebSocketは、関連付けられたリスナーのメソッドを呼び出し、それ自体を引数として渡します。 これらのメソッドはスレッド・セーフな方法で起動されるため、次の起動は前のメソッドの起動が終了した後でのみ開始できます。

    データが受信されると、WebSocketはreceiveメソッドを呼び出します。 メソッドonTextonBinaryonPingおよびonPongは、リスナーがメッセージを受信した後に完了したCompletionStageを返す必要があります。 リスナー・メソッドがCompletionStageではなくnullを戻す場合、WebSocketは、リスナーがすでに正常に完了したCompletionStageを戻したかのように動作します。

    WebSocketIOExceptionが発生すると、(入力が閉じていない場合)という例外を持つonErrorが呼び出されます。 特に指定しないかぎり、リスナー・メソッドが例外をスローし、メソッドによってメソッドからスローされた例外がスローされた場合、WebSocketは、この例外が発生しても例外をスローします。

    APIの注:
    WebSocketからListenerへの呼出し順序は、特にListenerメソッドが不入として処理されることを意味します。 これは、Listener実装が、可能な再帰、または処理ロジックに関してWebSocket.requestを呼び出す順序に関係する必要がないことを意味します。

    リスナーが複数のWebSocketに関連付けられている場合は注意が必要です。 この場合、WebSocketの異なるインスタンスに関連する呼出しは順序付けされず、同時に発生する可能性があります。

    受信メソッドから返されたCompletionStageには、「呼出しのカウンタ」では何もできません。 つまり、リスナー・メソッドの呼出し数を増やすために、CompletionStageを完了する必要はありません。 次の例は、完全なメッセージが蓄積されてから、結果が処理され、CompletionStageが完了するまでの間の起動のリクエストを一度に1つずつ行います。

        WebSocket.Listener listener = new WebSocket.Listener() {
    
            List<CharSequence> parts = new ArrayList<>();
            CompletableFuture<?> accumulatedMessage = new CompletableFuture<>();
    
            public CompletionStage<?> onText(WebSocket webSocket,
                                             CharSequence message,
                                             boolean last) {
                parts.add(message);
                webSocket.request(1);
                if (last) {
                    processWholeText(parts);
                    parts = new ArrayList<>();
                    accumulatedMessage.complete(null);
                    CompletionStage<?> cf = accumulatedMessage;
                    accumulatedMessage = new CompletableFuture<>();
                    return cf;
                }
                return accumulatedMessage;
            }
        ...
        }  

    導入されたバージョン:
    11
    • メソッドの詳細

      • onOpen

        default void onOpen​(WebSocket webSocket)
        WebSocketが接続されています。

        これは最初の起動で、1回行われます。 これは、通常、起動を増やすためのリクエストを作成するために使用されます。

        実装要件:
        デフォルトの実装は次のものと同等です。
            webSocket.request(1); 
        パラメータ:
        webSocket - 接続されているWebSocket
      • onText

        default CompletionStage<?> onText​(WebSocket webSocket,
                                          CharSequence data,
                                          boolean last)
        テキスト・データを受け取りました。

        WebSocketCharSequenceを再生する可能性があることを示すために、WebSocketが使用するCompletionStageを返します。 このCompletionStageが完了した後はCharSequenceにアクセスしないでください。

        実装要件:
        デフォルトの実装は次のものと同等です。
            webSocket.request(1);
            return null; 
        実装上の注意:
        dataは常に正当なUTF-16シーケンスです。
        パラメータ:
        webSocket - データが受信されたWebSocket
        data - データ
        last - この呼出しがメッセージを完了するかどうか
        戻り値:
        CharSequenceが再生されるときに完了するCompletionStage。すぐに回収できる場合はnull
      • onBinary

        default CompletionStage<?> onBinary​(WebSocket webSocket,
                                            ByteBuffer data,
                                            boolean last)
        バイナリ・データを受け取りました。

        このデータは、バッファ位置からその制限までのバイト数に置かれます。

        WebSocketByteBufferを再生する可能性があることを示すために、WebSocketが使用するCompletionStageを返します。 このCompletionStageが完了した後はByteBufferにアクセスしないでください。

        実装要件:
        デフォルトの実装は次のものと同等です。
            webSocket.request(1);
            return null; 
        パラメータ:
        webSocket - データが受信されたWebSocket
        data - データ
        last - この呼出しがメッセージを完了するかどうか
        戻り値:
        ByteBufferが再生されるときに完了するCompletionStage。すぐに回収できる場合はnull
      • onPing

        default CompletionStage<?> onPing​(WebSocket webSocket,
                                          ByteBuffer message)
        Pingメッセージを受信しました。

        WebSocketプロトコルによって保証されているように、メッセージは125バイトを超えていません。 これらのバイトは、バッファ位置からその制限までです。

        WebSocket実装では、pingを受信したときに双方向ポックが自動的に送信されるため、pingを受信したときにメッセージを明示的に送信する必要はほとんどありません。

        WebSocketによって使用されるCompletionStageByteBufferを再利用できるシグナルとして返します。 このCompletionStageが完了した後はByteBufferにアクセスしないでください。

        実装要件:
        デフォルトの実装は次のものと同等です。
            webSocket.request(1);
            return null; 
        パラメータ:
        webSocket - メッセージが受信されたWebSocket
        message - メッセージ
        戻り値:
        ByteBufferが再生されるときに完了するCompletionStage。すぐに回収できる場合はnull
      • onPong

        default CompletionStage<?> onPong​(WebSocket webSocket,
                                          ByteBuffer message)
        Pongメッセージが受信されました。

        WebSocketプロトコルによって保証されているように、メッセージは125バイトを超えていません。 これらのバイトは、バッファ位置からその制限までです。

        WebSocketによって使用されるCompletionStageByteBufferを再利用できるシグナルとして返します。 このCompletionStageが完了した後はByteBufferにアクセスしないでください。

        実装要件:
        デフォルトの実装は次のものと同等です。
            webSocket.request(1);
            return null; 
        パラメータ:
        webSocket - メッセージが受信されたWebSocket
        message - メッセージ
        戻り値:
        ByteBufferが再生されるときに完了するCompletionStage。すぐに回収できる場合はnull
      • onClose

        default CompletionStage<?> onClose​(WebSocket webSocket,
                                           int statusCode,
                                           String reason)
        WebSocket入力が閉じられたことを示すクローズ・メッセージを受け取ります。

        これは、指定されたWebSocketからの最後の呼出しです。 この起動が開始されるまでに、WebSocket入力がクローズされます。

        Closeメッセージは、ステータス・コードと終了理由で構成されています。 ステータス・コードは、範囲1000 <= code <= 65535の整数です。 reasonは、UTF-8表現が123バイトより長くなっていない文字列です。

        WebSocketの出力がまだ閉じていない場合、WebSocketの出力が閉じられる可能性があることを示すために、このメソッドによって返されたCompletionStageが使用されます。 WebSocketは、返されたCompletionStageの最初の完了時に出力をクローズするか、sendCloseまたはabortのいずれかのメソッドを起動します。

        APIの注:
        完了したことのないCompletionStageを返すと、出力の相互の閉包が効果的に無効になります。

        カスタム・クロージャ・コードや理由コードを指定するために、onClose呼出し内からsendCloseメソッドを呼び出すことができます。

            public CompletionStage<?> onClose(WebSocket webSocket,
                                              int statusCode,
                                              String reason) {
                webSocket.sendClose(CUSTOM_STATUS_CODE, CUSTOM_REASON);
                return new CompletableFuture<Void>();
            }  

        実装要件:
        このメソッドのデフォルト実装はnullを返し、出力をただちにクローズする必要があることを示します。
        パラメータ:
        webSocket - メッセージが受信されたWebSocket
        statusCode - ステータス・コード
        reason - 理由
        戻り値:
        WebSocketが閉じられたときに完了するCompletionStage。すぐに閉じられる場合はnull
      • onError

        default void onError​(WebSocket webSocket,
                             Throwable error)
        エラーが発生したことを示す。

        これは、指定されたWebSocketからの最後の起動です。 この呼出しがWebSocket入力を開始するまで、出力はクローズされます。 WebSocketは、WebSocketから呼出しがリクエストされたかどうかにかかわらず、onOpenを呼び出した後はいつでも、関連付けられているリスナー上でこのメソッドを呼び出すことができます。

        このメソッドから例外がスローされた場合、結果の動作は未定義です。

        パラメータ:
        webSocket - エラーが発生したWebSocket
        error - エラー