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 异常?