在KTOR中使用HttpClient的正确模式是什么?我应该像在每个应用生命周期中单独使用它,还是应该在每个请求中创建它?
w8ntj3qf1#
如果您需要连接到多个逻辑服务,那么每个应用程序可能需要多个客户端。但是如果您要处理单个HTTP服务器,最好使用一个客户端,因为它可以建立并保持与服务器的连接。它还可以分配以下资源:准备好的线程、协程和连接。如果你有多个客户端,你可能会耗尽这些资源。
rdlzhqv92#
我应该像在每个应用生命周期中使用单例一样使用它,还是应该在每个请求中创建它创建http客户端示例通常会占用一些资源,因此您不应为每个请求创建一个客户端示例。您应在每个应用的生命周期**仅创建一个http客户端示例,注入到应用中需要的任何位置,以确保
客户端可以配置为HttpClientEngineConfig(doc)或它的任何继承者。更多详细信息请参阅here文档。
HttpClientEngineConfig
6yt4nkrj3#
如果可以使用相同的配置/设置执行请求,则出于性能原因,最好重用HttpClient示例。但在某些情况下,您必须创建单独的示例,因为HttpClient的功能由engine和creating示例时指定的plugins确定。例如,当使用bearer authentication时,HttpClient示例只有在向相同的资源服务器发送请求时才能被重用(具有相同的授权配置)。类似地,如果两个请求应该使用不同的超时,则它们只能由不同的HttpClient执行。总而言之,应该为每个“特性集”创建一个HttpClient示例,由所需的引擎和插件决定。
HttpClient
3条答案
按热度按时间w8ntj3qf1#
如果您需要连接到多个逻辑服务,那么每个应用程序可能需要多个客户端。但是如果您要处理单个HTTP服务器,最好使用一个客户端,因为它可以建立并保持与服务器的连接。它还可以分配以下资源:准备好的线程、协程和连接。如果你有多个客户端,你可能会耗尽这些资源。
rdlzhqv92#
我应该像在每个应用生命周期中使用单例一样使用它,还是应该在每个请求中创建它
创建http客户端示例通常会占用一些资源,因此您不应为每个请求创建一个客户端示例。您应在每个应用的生命周期**仅创建一个http客户端示例,注入到应用中需要的任何位置,以确保
客户端可以配置为
HttpClientEngineConfig
(doc)或它的任何继承者。更多详细信息请参阅here文档。6yt4nkrj3#
如果可以使用相同的配置/设置执行请求,则出于性能原因,最好重用
HttpClient
示例。但在某些情况下,您必须创建单独的示例,因为
HttpClient
的功能由engine和creating示例时指定的plugins确定。例如,当使用bearer authentication时,
HttpClient
示例只有在向相同的资源服务器发送请求时才能被重用(具有相同的授权配置)。类似地,如果两个请求应该使用不同的超时,则它们只能由不同的
HttpClient
执行。总而言之,应该为每个“特性集”创建一个
HttpClient
示例,由所需的引擎和插件决定。