KTOR MultiPartFormDataContent 请求非常慢

问题描述 投票:0回答:1

我需要每小时执行数十万个包含 Form 元素或 File 元素的多部分请求。每个请求有 2 个部分,请求的总大小约为 30kb,但最大可达 20meg。我正在测试不超过 30kb 的请求。我的帖子方法如下:

varpartData:PartData = getThePartData()

client.post("endpoint") {
    headers(myHeaders)
    setBody(MultiPartFormDataContent(partData,boundary,contentType))
}

在我的接收端点上

post("endpointThat Performs BAD!!!!") {
   call.recieveMultipart().readAll().forEach {
     // do somthing trivial
   }
}

或者这是按预期执行的端点:

post("endpointThat Performs BAD!!!!") {
   call.recieve<String>.also{
     // do somthing trivial
   }
}

现在,在第一个示例中,我收到了大约 400 毫秒的延迟。 在第二个示例中,我几乎没有收到任何延迟。

在尝试调整我使用 call.recieveMultipart() 的情况时,我也坐了该属性

 io.ktor.http.content.multipart.skipTempFile to true

效果微乎其微

我尝试过两个客户端CIO和OkHttp,没有区别。

为什么 recieveMultipart 这么慢?我该如何解决它?

只需提供一些数字即可获取图片。使用 receiveMultipart 272 请求时需要 120 000 毫秒,receeve 需要 30 000 毫秒。大约相差4倍。

更新: 之间存在显着的性能差异

call.recieveMultipart().readAll()

call.recieveMultipart().forEachPart() {}
kotlin multipartform-data kotlin-coroutines ktor
1个回答
0
投票

您的问题可能与 Ktor 中已知的

PartData.FileItem
性能下降有关,如本期所述:KTOR-7484。您可能需要检查这是否符合您的情况,特别是如果您正在处理较大的多部分表单或文件上传。它可以提供一些见解或潜在的解决方法。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.