モジュール 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