kotlin Ktor的HttpClient使用模式正确

iqjalb3h  于 2022-12-19  发布在  Kotlin
关注(0)|答案(3)|浏览(182)

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

w8ntj3qf

w8ntj3qf1#

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

rdlzhqv9

rdlzhqv92#

我应该像在每个应用生命周期中使用单例一样使用它,还是应该在每个请求中创建它
创建http客户端示例通常会占用一些资源,因此您不应为每个请求创建一个客户端示例。您应在每个应用的生命周期**仅创建一个http客户端示例,注入到应用中需要的任何位置,以确保

  • 你已经使用了正确的http客户端配置,如线程池大小、超时等
  • 您将在应用程序关闭时释放资源。

客户端可以配置为HttpClientEngineConfigdoc)或它的任何继承者。更多详细信息请参阅here文档。

6yt4nkrj

6yt4nkrj3#

如果可以使用相同的配置/设置执行请求,则出于性能原因,最好重用HttpClient示例。
但在某些情况下,您必须创建单独的示例,因为HttpClient的功能由enginecreating示例时指定的plugins确定。
例如,当使用bearer authentication时,HttpClient示例只有在向相同的资源服务器发送请求时才能被重用(具有相同的授权配置)。
类似地,如果两个请求应该使用不同的超时,则它们只能由不同的HttpClient执行。
总而言之,应该为每个“特性集”创建一个HttpClient示例,由所需的引擎和插件决定。

相关问题