パッケージ jakarta.websocket

クラス Endpoint


  • public abstract class Endpoint
    extends ObjectSE
    Web ソケットエンドポイントは、WebSocket 会話を処理できるオブジェクトを表します。開発者は、プログラムによる WebSocket エンドポイントを実装するために、このクラスを継承できます。Endpoint クラスは、WebSocket のオープン、エラー、クローズのイベントをインターセプトするためにオーバーライドできるライフサイクルメソッドを保持します。onOpen メソッドを実装することで、プログラムエンドポイントは Session オブジェクトにアクセスできます。開発者は、MessageHandler 実装を追加して、受信 WebSocket メッセージをインターセプトすることができます。WebSocket エンドポイントの各インスタンスは、アクティブな接続ごとに一度に複数のスレッドによって呼び出されないことが保証されています。

    クライアントエンドポイントとしてデプロイされた場合、サーバーへの単一接続のために 1 回インスタンス化されます。

    サーバーエンドポイントとしてデプロイされると、実装は jakarta.websocket.server.ServerEndpointConfig.Configurator#getEndpointInstance メソッドを使用して、新しいクライアント接続ごとに使用するエンドポイントインスタンスを取得します。開発者がデフォルトの jakarta.websocket.server.ServerEndpointConfig.Configurator を使用する場合、アクティブなクライアント接続ごとに正確に 1 つのエンドポイントインスタンスが存在します。この典型的なケースでは、Endpoint のメソッドを実装 / オーバーライドするときに、開発者は各エンドポイントインスタンスを一度に呼び出すスレッドが最大で 1 つあることが保証されます。

    たとえば、複数のクライアント接続に単一のエンドポイントインスタンスを使用するなど、エンドポイントインスタンス作成のデフォルトポリシーを上書きするカスタム jakarta.websocket.server.ServerEndpointConfig.Configurator を開発者が提供する場合、開発者は同時に実行できるコードを記述する必要がある場合があります。

    これは、受信テキストメッセージを送信者にエコーバックする単純なエンドポイントの例です。

     
     public class EchoServer extends Endpoint {
    
         public void onOpen(Session session, EndpointConfig config) {
             final RemoteEndpoint remote = session.getBasicRemote();
             session.addMessageHandler(String.class, new MessageHandler.Whole<String<() {
                 public void onMessage(String text) {
                     try {
                         remote.sendString("Got your message (" + text + "). Thanks !");
                     } catch (IOException ioe) {
                         // handle send failure here
                     }
                 }
             });
         }
    
     }
     
     
    作成者:
    dannycoward
    • コンストラクターの詳細

      • Endpoint

        public Endpoint()
    • メソッドの詳細

      • onOpen

        public abstract void onOpen​(Session session,
                                    EndpointConfig config)
        開発者はこのメソッドを実装して、新しい会話が始まったときに通知を受けるようにする必要があります。

        注:

        • このメソッドからメッセージを送信することは許可されています。
        • このメソッドから MessageHandler を追加することが許可されています。このメソッドが完了するまで、メッセージは適切な MessageHandler にマップされません。
        パラメーター:
        session - アクティブ化されたばかりのセッション。
        config - このエンドポイントの構成に使用される構成。
      • onClose

        public void onClose​(Session session,
                            CloseReason closeReason)
        このメソッドは、リモートピアが閉じられているセッションの直前に呼び出されます。これは、リモートピアがクローズを開始してクローズフレームを送信したためにセッションがクローズされているか、ローカルの WebSocket コンテナーまたはこのエンドポイントがセッションのクローズをリクエストしているかに関係なく呼び出されます。開発者は、この最後の機会を利用して、ID などのセッション属性や、メソッドの完了後に使用できなくなる前に保持しているアプリケーションデータを取得できます。開発者は、このメソッド内からセッションを変更したり、この呼び出しから新しいメッセージを送信したりしないでください。基礎となる接続は、この段階ではメッセージを送信できません。
        パラメーター:
        session - 間もなく終了するセッション。
        closeReason - セッションが閉じられた理由。
      • onError

        public void onError​(Session session,
                            ThrowableSE thr)
        開発者は、Web ソケットセッションが Web ソケットプロトコルでモデル化されていないある種のエラーを作成するときに、このメソッドを実装できます。これは、たとえば、受信メッセージが大きすぎて処理できない、受信メッセージをエンコードできないという通知である可能性があります。

        このメソッドが(現在のところ)処理するように定義されている例外には、いくつかのカテゴリがあります。

        • 接続の問題。たとえば、Web ソケット接続を正式に閉じる前に発生するソケット障害。これらは SessionException としてモデル化されています
        • 開発者が作成したメッセージハンドラー呼び出しによってスローされるランタイムエラー。
        • メッセージハンドラーが呼び出される前に受信メッセージをエンコードする変換エラー。これらは DecodeException としてモデル化されています
        パラメーター:
        session - エラーが発生したときに使用中のセッション。
        thr - 問題を表すスロー可能オブジェクト。