Ktor 的 HttpClient 使用的正确模式

Posted

技术标签:

【中文标题】Ktor 的 HttpClient 使用的正确模式【英文标题】:correct pattern of Ktor's HttpClient usage 【发布时间】:2020-10-07 09:12:12 【问题描述】:

在 KTOR 中 HttpClient 的正确使用模式是什么。我应该像每个应用生命周期的单例一样使用它,还是应该根据每个请求创建它?

【问题讨论】:

【参考方案1】:

如果您需要连接到多个逻辑服务,我会说每个应用程序可能有多个客户端。 但是,如果您正在处理一个单一的 HTTP 服务器,最好有一个客户端,因为它建立并保持与服务器的连接。它还分配以下资源:准备好的线程、协程和连接。如果您有多个客户端,您可能会用完这些资源。

【讨论】:

【参考方案2】:

我应该像每个应用生命周期的单例一样使用它,还是应该根据每个请求创建它

创建 http 客户端实例通常会占用大量资源,因此您不应为每个请求都创建客户端实例。您应该每个应用的生命周期只创建一个 http 客户端实例,在应用中需要的任何地方注入,确保

您使用了正确的 http 客户端配置,例如线程池大小、超时等 您是releasing 应用程序关闭时的资源。

客户端可以配置HttpClientEngineConfig(doc) 或其任何继承者。文档here中的更多详细信息。

【讨论】:

以上是关于Ktor 的 HttpClient 使用的正确模式的主要内容,如果未能解决你的问题,请参考以下文章

Ktor HttpClient 在 runBlocking 中挂起

如何使用针对 linuxX64 的 ktor-client-core 修复“未解决的参考:HttpClient”

使用 Ktor HttpClient(CIO) websocket 发送内容时如何捕获 Broken pipe 异常?

在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件

处理 HttpClient Ktor 中的异常

如何在 ktor-client 中禁用重定向