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