WebSocket Deflate拡張機能
Ktorは、クライアントとサーバーの両方に対してDeflate WebSocket拡張機能 RFC-7692 を実装しています。この拡張機能は、送信前にフレームを透過的に圧縮し、受信後に展開(デコンプレス)できます。大量のテキストデータを送信する場合、この拡張機能を有効にすると便利です。
インストール
この拡張機能を使用するには、まずインストールする必要があります。そのためには、extensionsブロック内でinstallメソッドを使用します。
kotlin
// クライアントおよびサーバー用
install(WebSockets) {
extensions {
install(WebSocketDeflateExtension) {
/**
* [java.util.zip.Deflater] で使用する圧縮レベル。
*/
compressionLevel = Deflater.DEFAULT_COMPRESSION
/**
* 小さな送信フレームの圧縮を防ぎます。
*/
compressIfBiggerThan(bytes = 4 * 1024)
}
}
}高度な設定パラメータ
コンテキストのテイクオーバー(Context takeover)
クライアント(およびサーバー)が圧縮ウィンドウを使用するかどうかを指定します。これらのパラメータを有効にすると、1つのセッションあたりに割り当てられるスペースの量が削減されます。java.util.zip.Deflater APIの制限により、ウィンドウサイズは設定できないことに注意してください。値は15に固定されています。
kotlin
clientNoContextTakeOver = false
serverNoContextTakeOver = falseこれらのパラメータについては、RFC-7692 Section 7.1.1 で説明されています。
圧縮条件の指定
圧縮条件を明示的に指定するには、compressIfメソッドを使用できます。例えば、テキストのみを圧縮する場合:
kotlin
compressIf { frame ->
frame is Frame.Text
}compressIfへのすべての呼び出しは、圧縮が行われる前に評価されます。
プロトコルリストの微調整
送信するプロトコルのリストは、configureProtocolsメソッドを使用して必要に応じて編集できます:
kotlin
configureProtocols { protocols ->
protocols.clear()
protocols.add(...)
}