Skip to content

WebSocket Deflate 확장

Ktor는 클라이언트 및 서버를 위해 Deflate WebSocket 확장 RFC-7692을 구현합니다. 이 확장은 전송 전에 프레임을 투명하게 압축하고, 수신 후에 압축을 해제할 수 있습니다. 많은 양의 텍스트 데이터를 전송하는 경우 이 확장을 활성화하는 것이 유용합니다.

설치

이 확장을 사용하려면 먼저 설치해야 합니다. 이를 위해 extensions 블록에서 install 메서드를 사용할 수 있습니다.

kotlin
// For client and server
install(WebSockets) {
    extensions {
        install(WebSocketDeflateExtension) {
            /**
             * Compression level to use for [java.util.zip.Deflater].
             */
            compressionLevel = Deflater.DEFAULT_COMPRESSION

            /**
             * Prevent compressing small outgoing frames.
             */
            compressIfBiggerThan(bytes = 4 * 1024)
        }
    }
}

고급 구성 매개변수

컨텍스트 인계

클라이언트(및 서버)가 압축 윈도우를 사용해야 하는지 여부를 지정합니다. 이 매개변수들을 활성화하면 단일 세션당 할당되는 공간의 양이 줄어듭니다. 참고로 java.util.zip.Deflater API의 제한으로 인해 윈도우 크기는 구성할 수 없습니다. 값은 15로 고정됩니다.

kotlin
clientNoContextTakeOver = false

serverNoContextTakeOver = false

이 매개변수들은 RFC-7692 섹션 7.1.1에 설명되어 있습니다.

압축 조건 지정

압축 조건을 명시적으로 지정하려면 compressIf 메서드를 사용할 수 있습니다. 예를 들어, 텍스트만 압축하려면:

kotlin
compressIf { frame -> 
    frame is Frame.Text
}

compressIf에 대한 모든 호출은 압축이 수행되기 전에 평가됩니다.

프로토콜 목록 세부 조정

전송할 프로토콜 목록은 configureProtocols 메서드를 사용하여 필요에 따라 편집할 수 있습니다.

kotlin
configureProtocols { protocols ->
    protocols.clear()
    protocols.add(...)
}