Ktor ClientにおけるWebSockets
必要な依存関係: io.ktor:ktor-client-websockets
コード例: client-websockets
クライアント向けのWebSocketsプラグインを使用すると、サーバーとのメッセージ交換のためのWebSocketセッションを処理できます。
NOTE
すべてのエンジンがWebSocketsをサポートしているわけではありません。サポートされているエンジンの概要については、「制限事項」を参照してください。
TIP
サーバー側のWebSocketサポートについては、「
依存関係の追加
WebSocketsを使用するには、ビルドスクリプトにktor-client-websocketsアーティファクトを含める必要があります。
Ktorクライアントで必要となるアーティファクトについては、「
設定
オプションで、installブロック内でプラグインを構成するには、WebSockets.Configのサポートされているプロパティを渡します。
maxFrameSizeFrameの最大サイズを設定します。 contentConverterpingIntervalMillisLong形式でピング間の期間を指定します。 pingIntervalDuration形式でピング間の期間を指定します。 以下の例では、WebSocketsプラグインが20秒(20_000ミリ秒)のピング間隔で構成され、ピングフレームを自動的に送信してWebSocket接続を維持します。
WebSocketセッションの操作
クライアントのWebSocketセッションは、DefaultClientWebSocketSessionインターフェースによって表現されます。このインターフェースは、WebSocketフレームの送受信とセッションのクローズを可能にするAPIを公開しています。
WebSocketセッションへのアクセス
HttpClientは、WebSocketセッションにアクセスする主な2つの方法を提供します。
webSocket()関数は、DefaultClientWebSocketSessionをブロック引数として受け入れます。kotlinwebSocketSession()関数は、DefaultClientWebSocketSessionインスタンスを返し、runBlockingまたはlaunchスコープの外でセッションにアクセスできます。
WebSocketセッションの処理
関数ブロック内で、指定されたパスのハンドラーを定義します。以下の関数とプロパティがブロック内で利用可能です。
send()send()関数を使用します。 outgoingoutgoingプロパティを使用します。フレームはFrameクラスによって表現されます。 incomingincomingプロパティを使用します。フレームはFrameクラスによって表現されます。 close()close()関数を使用します。 フレームタイプ
WebSocketフレームのタイプを検査し、それに応じて処理できます。一般的なフレームタイプには以下があります。
Frame.Textはテキストフレームを表します。そのコンテンツを読み取るには、Frame.Text.readText()を使用します。Frame.Binaryはバイナリフレームを表します。そのコンテンツを読み取るには、Frame.Binary.readBytes()を使用します。Frame.Closeはクローズフレームを表します。セッション終了の理由を取得するには、Frame.Close.readReason()を使用します。
例
以下の例では、echo WebSocketエンドポイントを作成し、サーバーとの間でメッセージを送受信する方法を示します。
完全な例については、「client-websockets」を参照してください。
