Skip to content
Server Plugin

DoubleReceive

필수 의존성: io.ktor:ktor-server-double-receive

코드 예시: double-receive

네이티브 서버
Ktor는 Kotlin/Native를 지원하며 추가 런타임이나 가상 머신 없이 서버를 실행할 수 있게 합니다.
지원: ✅

DoubleReceive 플러그인은 RequestAlreadyConsumedException 예외 없이 요청 바디를 여러 번 수신할 수 있는 기능을 제공합니다. 이는 플러그인이 요청 바디를 이미 소비하여 라우트 핸들러 내에서 이를 수신할 수 없는 경우에 유용할 수 있습니다. 예를 들어, CallLogging 플러그인을 사용하여 요청 바디를 로깅한 다음, post 라우트 핸들러 내에서 바디를 한 번 더 수신하는 데 DoubleReceive을 사용할 수 있습니다.

DoubleReceive 플러그인은 향후 업데이트에서 잠재적으로 호환성이 깨지는 변경 사항과 함께 발전할 것으로 예상되는 실험적인 API를 사용합니다.

의존성 추가

DoubleReceive을 사용하려면 빌드 스크립트에 ktor-server-double-receive 아티팩트를 포함해야 합니다:

Kotlin
Groovy
XML

DoubleReceive 설치

애플리케이션에 DoubleReceive 플러그인을 설치하려면, 지정된

모듈
모듈을 사용하면 라우트를 그룹화하여 애플리케이션을 구조화할 수 있습니다.
install 함수에 전달하세요. 아래 코드 스니펫은 DoubleReceive을 설치하는 방법을 보여줍니다...

  • ... embeddedServer 함수 호출 내에서.
  • ... Application 클래스의 확장 함수인 명시적으로 정의된 module 내에서.
kotlin
kotlin

DoubleReceive 플러그인은 특정 라우트에 설치할 수도 있습니다. 이는 애플리케이션의 리소스별로 다른 DoubleReceive 설정을 필요로 할 때 유용할 수 있습니다.

DoubleReceive을 설치한 후에는 요청 바디를 여러 번 수신할 수 있으며, 각 호출은 동일한 인스턴스를 반환합니다. 예를 들어, CallLogging 플러그인을 사용하여 요청 바디 로깅을 활성화할 수 있습니다...

kotlin
install(CallLogging) {
    level = Level.TRACE
    format { call ->
        runBlocking {
            "Body: ${call.receiveText()}"
        }
    }
}

... 그리고 라우트 핸들러 내에서 요청 바디를 한 번 더 가져올 수 있습니다.

kotlin
post("/") {
    val receivedText = call.receiveText()
    call.respondText("Text '$receivedText' is received")
}

전체 예시는 다음에서 찾을 수 있습니다: double-receive.

DoubleReceive 설정

기본 설정으로, DoubleReceive요청 바디를 다음 타입으로 수신하는 기능을 제공합니다:

  • ByteArray
  • String
  • Parameters
  • ContentNegotiation 플러그인에서 사용되는 데이터 클래스

기본적으로 DoubleReceive은 다음을 지원하지 않습니다:

동일한 요청에서 다른 타입을 수신하거나 스트림 또는 채널을 수신할 필요가 없다면 cacheRawRequest 속성을 false로 설정하세요:

kotlin
install(DoubleReceive) {
    cacheRawRequest = false
}