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