Ktor 的 HttpClient 使用的正确模式

correct pattern of Ktor's HttpClient usage

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

Should I use it like singleton per app lifecycle, or should I create it per each request

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

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

客户端可以配置为HttpClientEngineConfig(doc) or any of its inheritors. More details in the documentation here.

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