パッケージ jakarta.websocket

インターフェース Session

すべてのスーパーインターフェース:
AutoCloseableSECloseableSE

public interface Session extends CloseableSE
Web ソケットセッションは、2 つの Web ソケットエンドポイント間の会話を表します。WebSocket ハンドシェイクが正常に完了すると、Web ソケット実装はエンドポイントにオープン Websocket セッションを提供します。エンドポイントは、セッションに MessageHandler を提供することにより、この新しく作成されたセッションの一部である受信メッセージに関心を登録し、このセッションから取得した RemoteEndpoint オブジェクトを使用してメッセージを会話のもう一方の端に送信できます。

セッションが閉じられると、アプリケーションによる使用は無効になります。セッションが閉じられた後、そのメソッドのいずれか(close() メソッドを除く)を呼び出すと、IllegalStateExceptionSE がスローされます。開発者は、Endpoint.onClose(jakarta.websocket.Session, jakarta.websocket.CloseReason) メソッドの実行中にセッションから情報を取得する必要があります。セッションが閉じられた後にセッション close() メソッドを呼び出す CloseableSE の規則に従うことは効果がありません。

セッションオブジェクトは、複数のスレッドによって呼び出される場合があります。このような状況では、実装はセッションの可変プロパティの整合性を確保する必要があります。

作成者:
dannycoward
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    この会話の受信メッセージを処理するために登録します。
    <T> void
    この会話の受信メッセージを処理するために登録します。
    <T> void
    この会話の受信メッセージを処理するために登録します。
    void
    現在の会話を通常のステータスコードで閉じ、理由句は付けません。
    void
    close(CloseReason closeReason)
    現在の会話を閉じて、閉鎖の理由を示します。
    非同期にメッセージをピアに送信できるこの会話のピアを表す RemoteEndpoint オブジェクトの参照を返します。
    メッセージをピアに同期的に送信できるこの会話のピアを表す RemoteEndpoint オブジェクトへの参照を返します。
    このセッションが属するコンテナーを返します。
    このセッションに割り当てられた一意の識別子を含む文字列を返します。
    int
    このセッションがバッファリングできる受信バイナリメッセージの最大長。
    long
    コンテナーが非アクティブな場合、つまり、コンテナーによってこのセッションが閉じられるまでのミリ秒数を返します。
    int
    このセッションがバッファリングできる受信テキストメッセージの最大長。
    このセッションの MessageHandlers のセットの変更不可能なコピーを返します。
    この会話に現在使用されている拡張機能のリストを返します。
    この会話の websocket ハンドシェイク中に合意したサブプロトコルを返します。
    このセッションが接続を表す同じエンドポイントへの接続を表す、開いているすべての Web ソケットセッションのセットのコピーを返します。
    このセッションが開かれたリクエストに関連して使用されるパスパラメーター名と値のマップを返します。
    現在使用されている websocket プロトコルのバージョンを返します。
    このセッションが開かれたリクエストに関連付けられたクエリ文字列を返します。
    このセッションが開かれたリクエストに関連付けられたリクエストパラメーターを返します。
    プロトコルからクエリ文字列 (存在する場合) まで、このセッションが開かれた完全な URI を返します。
    このセッションで認証されたユーザーを返すか、このセッションで認証されたユーザーがいない場合は null を返します。
    セッションが開いている間、このメソッドは、このセッションインスタンスに関連するアプリケーション固有の情報を保存するために開発者が使用できるマップを返します。
    boolean
    基になるソケットが開いている場合にのみ true を返します。
    boolean
    基になるソケットが安全なトランスポートを使用している場合にのみ true を返します。
    void
    このセッションに属するセットから指定された MessageHandler を削除します。
    void
    このセッションがバッファリングできる受信バイナリメッセージの最大長を設定します。
    void
    setMaxIdleTimeout(long milliseconds)
    コンテナーが非アクティブの場合、つまりコンテナーによってこのセッションが閉じられるまでのミリ秒数を設定します。
    void
    このセッションがバッファリングできる受信テキストメッセージの最大長を設定します。
  • メソッドの詳細

    • getContainer

      WebSocketContainer getContainer()
      このセッションが属するコンテナーを返します。
      戻り値:
      コンテナー。
    • addMessageHandler

      void addMessageHandler(MessageHandler handler) throws IllegalStateExceptionSE
      この会話の受信メッセージを処理するために登録します。ネイティブ Websocket メッセージ型(テキスト、バイナリ、ピンポン)ごとに最大 1 つのメッセージハンドラーを各セッションに追加できます。つまり受信テキストメッセージを処理する最大 1 つのメッセージハンドラー、受信バイナリメッセージを処理する最大 1 つのメッセージハンドラー、受信ポンメッセージを処理する最大 1 つのメッセージハンドラー。どのメッセージハンドラーがネイティブ websocket メッセージ型のどれを処理するかの詳細については、MessageHandler.Whole および MessageHandler.Partial を参照してください。いずれかの型を複数追加すると、ランタイム例外が発生します。

      MessageHandler.Whole または MessageHandler.Partial から直接派生した匿名クラスを提供しない限り、このメソッドを使用しても安全ではありません。その他すべての場合(ラムダ式、より複雑な継承、ジェネリクス型の配置)では、addMessageHandler(Class, jakarta.websocket.MessageHandler.Whole) または addMessageHandler(Class, jakarta.websocket.MessageHandler.Partial) のいずれかの方法を使用する必要があります。

      コンテナーがメッセージの MessageHandler を識別すると、セッション用に構成された MessageHandlers に対するその後の変更に関係なく、MessageHandler がメッセージ全体に使用されます。

      パラメーター:
      handler - 追加する MessageHandler
      例外:
      IllegalStateExceptionSE - このハンドラーと同じネイティブ websocket メッセージ型に登録されている MessageHandler がすでにある場合。
    • addMessageHandler

      <T> void addMessageHandler(ClassSE<T> clazz, MessageHandler.Whole<T> handler)
      この会話の受信メッセージを処理するために登録します。ネイティブ Websocket メッセージ型(テキスト、バイナリ、ピンポン)ごとに最大 1 つのメッセージハンドラーを各セッションに追加できます。つまり受信テキストメッセージを処理する最大 1 つのメッセージハンドラー、受信バイナリメッセージを処理する最大 1 つのメッセージハンドラー、受信ポンメッセージを処理する最大 1 つのメッセージハンドラー。どのメッセージハンドラーがネイティブ websocket メッセージ型のどれを処理するかの詳細については、MessageHandler.Whole および MessageHandler.Partial を参照してください。いずれかの型を複数追加すると、ランタイム例外が発生します。

      コンテナーがメッセージの MessageHandler を識別すると、セッション用に構成された MessageHandlers に対するその後の変更に関係なく、MessageHandler がメッセージ全体に使用されます。

      型パラメーター:
      T - 指定されたハンドラーが対象とするメッセージの型。
      パラメーター:
      clazz - 登録するメッセージハンドラーによって処理されるメッセージの型。
      handler - 追加するメッセージハンドラー全体。
      例外:
      IllegalStateExceptionSE - このハンドラーと同じネイティブ websocket メッセージ型に登録されている MessageHandler がすでにある場合。
      導入:
      WebSocket 1.1
    • addMessageHandler

      <T> void addMessageHandler(ClassSE<T> clazz, MessageHandler.Partial<T> handler)
      この会話の受信メッセージを処理するために登録します。ネイティブ Websocket メッセージ型(テキスト、バイナリ、ピンポン)ごとに最大 1 つのメッセージハンドラーを各セッションに追加できます。つまり受信テキストメッセージを処理する最大 1 つのメッセージハンドラー、受信バイナリメッセージを処理する最大 1 つのメッセージハンドラー、受信ポンメッセージを処理する最大 1 つのメッセージハンドラー。どのメッセージハンドラーがネイティブ websocket メッセージ型のどれを処理するかの詳細については、MessageHandler.Whole および MessageHandler.Partial を参照してください。いずれかの型を複数追加すると、ランタイム例外が発生します。

      コンテナーがメッセージの MessageHandler を識別すると、セッション用に構成された MessageHandlers に対するその後の変更に関係なく、MessageHandler がメッセージ全体に使用されます。

      型パラメーター:
      T - 指定されたハンドラーが対象とするメッセージの型。
      パラメーター:
      clazz - 登録するメッセージハンドラーによって処理されるメッセージの型。
      handler - 追加する部分的なメッセージハンドラー。
      例外:
      IllegalStateExceptionSE - このハンドラーと同じネイティブ websocket メッセージ型に登録されている MessageHandler がすでにある場合。
      導入:
      WebSocket 1.1
    • getMessageHandlers

      SetSE<MessageHandler> getMessageHandlers()
      このセッションの MessageHandlers のセットの変更不可能なコピーを返します。
      戻り値:
      メッセージハンドラーのセット。
    • removeMessageHandler

      void removeMessageHandler(MessageHandler handler)
      このセッションに属するセットから、指定された MessageHandler を削除します。このメソッドは、指定されたハンドラーがメッセージを処理している場合、使用されなくなるまでブロックする可能性があります。

      コンテナーがメッセージの MessageHandler を識別すると、セッション用に構成された MessageHandlers に対するその後の変更に関係なく、MessageHandler がメッセージ全体に使用されます。

      パラメーター:
      handler - 削除するハンドラー。
    • getProtocolVersion

      StringSE getProtocolVersion()
      現在使用されている WebSocket プロトコルのバージョンを返します。これは、開始ハンドシェイクで使用される Sec-WebSocket-Version ヘッダーの値と見なされます。つまり、"13" です。
      戻り値:
      プロトコルのバージョン。
    • getNegotiatedSubprotocol

      StringSE getNegotiatedSubprotocol()
      この会話の websocket ハンドシェイク中に合意したサブプロトコルを返します。
      戻り値:
      ネゴシエートされたサブプロトコル。存在しない場合は空の文字列。
    • getNegotiatedExtensions

      ListSE<Extension> getNegotiatedExtensions()
      この会話に現在使用されている拡張機能のリストを返します。
      戻り値:
      交渉された拡張。
    • isSecure

      boolean isSecure()
      基になるソケットが安全なトランスポートを使用している場合にのみ true を返します。
      戻り値:
      安全なトランスポートを使用しているかどうか。
    • isOpen

      boolean isOpen()
      基になるソケットが開いている場合にのみ true を返します。
      戻り値:
      セッションがアクティブかどうか。
    • getMaxIdleTimeout

      long getMaxIdleTimeout()
      このセッションが非アクティブな場合、つまり、その間にメッセージが送受信されない場合、コンテナーによってこのセッションが閉じられるまでのミリ秒数を返します。ゼロまたは負の値は、このタイムアウトが使用されないことを示します。
      戻り値:
      ミリ秒単位のタイムアウト。
    • setMaxIdleTimeout

      void setMaxIdleTimeout(long milliseconds)
      このセッションが非アクティブな場合、つまり、その間にメッセージが送信または受信されない場合に、コンテナーによってこのセッションが閉じられるまでのミリ秒数を設定します。ゼロまたは負の値は、このタイムアウトが使用されないことを示します。
      パラメーター:
      milliseconds - ミリ秒数。
    • setMaxBinaryMessageBufferSize

      void setMaxBinaryMessageBufferSize(int length)
      このセッションがバッファリングできる受信バイナリメッセージの最大長を設定します。
      パラメーター:
      length - 最大長。
    • getMaxBinaryMessageBufferSize

      int getMaxBinaryMessageBufferSize()
      このセッションがバッファできる受信バイナリメッセージの最大長。実装が、大きすぎるためにバッファリングできないバイナリメッセージを受信した場合、CloseReason.CloseCodes.TOO_BIG のクローズコードでセッションを閉じる必要があります。
      戻り値:
      バッファリングできるバイナリメッセージの最大サイズ。
    • setMaxTextMessageBufferSize

      void setMaxTextMessageBufferSize(int length)
      このセッションがバッファリングできる受信テキストメッセージの最大長を設定します。
      パラメーター:
      length - 最大長。
    • getMaxTextMessageBufferSize

      int getMaxTextMessageBufferSize()
      このセッションがバッファリングできる受信テキストメッセージの最大長。実装が大きすぎるためにバッファリングできないテキストメッセージを受信した場合、CloseReason.CloseCodes.TOO_BIG の終了コードでセッションを閉じる必要があります。
      戻り値:
      バッファできるテキストメッセージの最大サイズ。
    • getAsyncRemote

      RemoteEndpoint.Async getAsyncRemote()
      非同期にメッセージをピアに送信できるこの会話のピアを表す RemoteEndpoint オブジェクトの参照を返します。
      戻り値:
      リモートエンドポイント。
    • getBasicRemote

      RemoteEndpoint.Basic getBasicRemote()
      メッセージをピアに同期的に送信できるこの会話のピアを表す RemoteEndpoint オブジェクトへの参照を返します。
      戻り値:
      リモートエンドポイント。
    • getId

      StringSE getId()
      このセッションに割り当てられた一意の識別子を含む文字列を返します。識別子は Web ソケットの実装によって割り当てられ、実装に依存します。
      戻り値:
      このセッションインスタンスの一意の識別子。
    • close

      void close() throws IOExceptionSE
      現在の会話を通常のステータスコードで閉じ、理由句は付けません。
      次で指定:
      インターフェース AutoCloseableSEclose 
      次で指定:
      インターフェース CloseableSEclose 
      例外:
      IOExceptionSE - 接続を閉じるときに接続エラーが発生した場合。
    • close

      void close(CloseReason closeReason) throws IOExceptionSE
      現在の会話を終了し、終了の理由を示します。終了呼び出しにより、実装はできるだけ早くクライアントに終了を通知しようとします。これにより、終了通知の直前に未送信のメッセージが送信される可能性があります。終了通知が送信された後、実装はエンドポイントの onClose メソッドに通知します。Websocket 仕様では、ステータスコードと理由フレーズの許容される使用方法が定義されていることに注意してください。アプリケーションが closeReason に使用する適切な終了コードを決定できない場合は、CloseReason.CloseCodes.NO_STATUS_CODE を使用することをお勧めします。
      パラメーター:
      closeReason - 閉鎖の理由。
      例外:
      IOExceptionSE - 接続を閉じるときに接続エラーが発生した場合
    • getRequestURI

      URISE getRequestURI()
      プロトコルからクエリ文字列 (存在する場合) まで、このセッションが開かれた完全な URI を返します。URI は、必要に応じて ws または wss に変更する必要があるプロトコルを除いて、WebSocket にアップグレードされた HTTP リクエストに使用される完全な URI と同一である必要があります。この値のベースとして使用されるのは、101 Switching Protocols レスポンスを受信した HTTP リクエストに関連付けられた URI であり、以前のリダイレクトされたリクエストではありません (存在する場合)。
      戻り値:
      リクエスト URI。
    • getRequestParameterMap

      MapSE<StringSE,ListSE<StringSE>> getRequestParameterMap()
      このセッションが開かれたリクエストに関連付けられたリクエストパラメーターを返します。リクエストパラメーターは、RFC 6455 によって HTTP GET メソッドのみを使用するように制限されている HTTP アップグレードリクエストの一部です。返された Map のパラメーターは、クエリ文字列に含まれるパラメーターの表現になります。
      戻り値:
      リクエストパラメーターの変更不可能なマップ。
    • getQueryString

      StringSE getQueryString()
      このセッションが開かれたリクエストに関連付けられたクエリ文字列を返します。
      戻り値:
      クエリ文字列
    • getPathParameters

      MapSE<StringSE,StringSE> getPathParameters()
      このセッションが開かれたリクエストに関連して使用されるパスパラメーター名と値のマップを返します。
      戻り値:
      パスパラメーターの変更不可能なマップ。マップのキーはパラメーター名であり、マップ内の値はパラメーター値です。
    • getUserProperties

      MapSE<StringSE,ObjectSE> getUserProperties()
      セッションが開いている間、このメソッドは、開発者がこのセッションインスタンスに関連するアプリケーション固有の情報を格納するために使用できるマップを返します。開発者は、セッションを開いてから onClose() メソッドを実行するまでの間、いつでもこのマップから情報を取得できます。ただし、それ以外の場合、このマップを使用して保存された情報はコンテナーによって保持されなくなる可能性があります。Web コンテナーの分散実装で実行されている Web ソケットアプリケーションは、アプリケーション固有のオブジェクトを java.io.Serializable に保存する必要があります。そうしないと、フェイルオーバー後にオブジェクトが再作成されない場合があります。

      サーバーセッションの場合、この Map の初期コンテンツは、jakarta.websocket.server.ServerEndpointConfig.Configurator#modifyHandshake() メソッドが終了した時点で jakarta.websocket.server.ServerEndpointConfig#getUserProperties() から返されたユーザープロパティマップの浅いコピーでなければなりません。

      クライアントセッションの場合、この Map の初期コンテンツは、WebSocketContainer.connectToServer(Class, ClientEndpointConfig, URI) または WebSocketContainer.connectToServer(Endpoint, ClientEndpointConfig, URI) に渡された ClientEndpointConfigEndpointConfig.getUserProperties() から返されたユーザープロパティマップの浅いコピーである必要があります。

      戻り値:
      アプリケーションデータの編集可能なマップ。
    • getUserPrincipal

      PrincipalSE getUserPrincipal()
      このセッションで認証されたユーザーを返すか、このセッションで認証されたユーザーがいない場合は null を返します。
      戻り値:
      ユーザープリンシパル。
    • getOpenSessions

      SetSE<Session> getOpenSessions()
      このセッションが接続を表すのと同じエンドポイントへの接続を表す、開いているすべての Web ソケットセッションのセットのコピーを返します。セットには、このメソッドが呼び出されるセッションが含まれます。これらのセッションは、このメソッドが戻った後のどの時点でもまだ開いていない可能性があります。例: 後でセットを反復処理すると、1 つ以上の閉じたセッションが生成される場合があります。開発者は session.isOpen() を使用して確認する必要があります。
      戻り値:
      復帰時に開いているセッションのセット。