

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# HTTP 客户端配置
<a name="http-client-config"></a>

默认情况下， 适用于 Kotlin 的 AWS SDK 使用基于的 HTTP 客户端[OkHttp](https://square.github.io/okhttp)。您可以通过提供明确配置的客户端来覆盖 HTTP 客户端及其配置。

**警告**  
无论您使用哪个 HTTP 引擎，项目中的其他依赖项都可能具有传递依赖关系，这些依赖关系与 SDK 要求的特定引擎版本相冲突。特别是，众所周知，诸如Spring Boot之类的框架可以管理依赖关系， OkHttp并且依赖于比SDK更旧的版本。请参[如何解决依赖冲突？](ts-faq-dep-conflict-resolution.md)阅，了解更多信息。

**注意**  
默认情况下，每个服务客户端都使用自己的 HTTP 客户端副本。如果您在应用程序中使用多个服务，则可能需要构建一个 HTTP 客户端并在所有服务客户端之间共享该客户端。

## 基本配置
<a name="basic-http-confg"></a>

配置服务客户端时，可以配置默认引擎类型。SDK 管理生成的 HTTP 客户端引擎，并在不再需要时自动将其关闭。

以下示例显示了 DynamoDB 客户端初始化期间的 HTTP 客户端配置。

### 导入
<a name="basic-config-ex-imports"></a>

```
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient
import kotlin.time.Duration.Companion.seconds
```

### 代码
<a name="basic-config-ex-code"></a>

```
DynamoDbClient {
    region = "us-east-2"
    httpClient {
        maxConcurrency = 64u
        connectTimeout = 10.seconds
    }
}.use { ddb ->

    // Perform some actions with Amazon DynamoDB.
}
```

## 高级配置
<a name="advanced-http-config"></a>

默认 HTTP 配置适用于大多数用例。对于某些高级用例，例如高吞吐量环境，以下高级配置选项提供了其他特性和功能：

### 指定 HTTP 引擎类型
<a name="http-config-engine"></a>

要指定非默认 HTTP 引擎类型或自定义特定于特定 HTTP 引擎类型的配置，可以向其中传递一个用于指定`httpClient`引擎类型的附加参数。

以下示例指定了可用于配置[https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine/index.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine/index.html)该[https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine-config/index.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine-config/index.html)属性的内容。

#### 导入
<a name="http-config-specify-engine-imports"></a>

```
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient
import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine
```

#### 代码
<a name="http-config-specify-engine-code"></a>

```
DynamoDbClient {
    region = "us-east-2"
    httpClient(OkHttpEngine) {  // The first parameter specifies the HTTP engine type.
        // The following parameter is generic HTTP configuration available in any engine type.
        maxConcurrency = 64u

            // The following parameter is OkHttp-specific configuration.
        maxConcurrencyPerHost = 32u
    }
}.use { ddb ->

    // Perform some actions with Amazon DynamoDB.
}
```

引擎类型的可能值为`OkHttpEngine`[https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp4/aws.smithy.kotlin.runtime.http.engine.okhttp4/-ok-http4-engine/index.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp4/aws.smithy.kotlin.runtime.http.engine.okhttp4/-ok-http4-engine/index.html)、和[https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-crt/aws.smithy.kotlin.runtime.http.engine.crt/-crt-http-engine/index.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-crt/aws.smithy.kotlin.runtime.http.engine.crt/-crt-http-engine/index.html)。

要使用特定于 HTTP 引擎的配置参数，必须将该引擎添加为编译时依赖项。对于`OkHttpEngine`，您可以使用 Gradle 添加以下依赖项。

（您可以导航到该{{X.Y.Z}}链接以查看可用的最新版本。）

```
implementation(platform("aws.smithy.kotlin:bom:[https://github.com/smithy-lang/smithy-kotlin/releases/latest](https://github.com/smithy-lang/smithy-kotlin/releases/latest)"))
implementation("aws.smithy.kotlin:http-client-engine-okhttp")
```

对于`CrtHttpEngine`，添加以下依赖关系。

```
implementation(platform("aws.smithy.kotlin:bom:[https://github.com/smithy-lang/smithy-kotlin/releases/latest](https://github.com/smithy-lang/smithy-kotlin/releases/latest)"))
implementation("aws.smithy.kotlin:http-client-engine-crt")
```

#### 使用 `OkHttp4Engine`
<a name="http-config-okhttp4engine"></a>

`OkHttp4Engine`如果不能使用默认值，请使用`OkHttpEngine`。[smithy-kotlin GitHub 存储库](https://github.com/smithy-lang/smithy-kotlin/tree/main/runtime/protocol/http-client-engines/http-client-engine-okhttp4)包含有关如何配置和使用的信息。`OkHttp4Engine`

#### 使用显式的 HTTP 客户端
<a name="http-client-explicit-usage"></a>

当你使用显式 HTTP 客户端时，你要对其生命周期负责，包括在不再需要它时关闭。HTTP 客户端的存活时间必须至少与使用它的任何服务客户端一样长。

以下代码示例显示了在 HTTP 客户端处于活动状态时保持 HTTP 客户端保持活动`DynamoDbClient`状态的代码。该[https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.io/use.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/runtime-core/aws.smithy.kotlin.runtime.io/use.html)函数可确保 HTTP 客户端正确关闭。

##### 导入
<a name="http-client-explicit-usage-ex-imports"></a>

```
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient
import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine
import kotlin.time.Duration.Companion.seconds
```

##### 代码
<a name="http-client-explicit-usage-ex-code"></a>

```
OkHttpEngine {
    maxConcurrency = 64u
    connectTimeout = 10.seconds
}.use { okHttpClient ->

     DynamoDbClient {
        region = "us-east-2"
        httpClient = okHttpClient
    }.use { ddb ->
        {
            // Perform some actions with Amazon DynamoDB.
        }
    }
}
```

### 空闲连接监控
<a name="http-idle-connection-monitoring"></a>

**重要**  
 OkHttp 引擎的连接空闲轮询功能 ([https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine-config/connection-idle-polling-interval.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine-config/connection-idle-polling-interval.html)) 已被自动连接失败重试 () 所取代。[https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine-config/retry-on-connection-failure.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine-config/retry-on-connection-failure.html)**连接空闲轮询将在 SDK 版本 1.7 中**弃用**，在 SDK 版本 **v1.** **8 中将移除**。**有关更多详细信息[，请参阅相关的 GitHub 讨论帖子](https://github.com/aws/aws-sdk-kotlin/discussions/1797)。

[https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine/](https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine/)提供了用于监控空闲连接以进行远程关闭的[https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine-config/connection-idle-polling-interval.html](https://docs.aws.amazon.com/smithy-kotlin/api/latest/http-client-engine-okhttp/aws.smithy.kotlin.runtime.http.engine.okhttp/-ok-http-engine-config/connection-idle-polling-interval.html)配置选项。此功能可检测服务何时关闭了仍在连接池中的连接，从而防止后续请求出现错误。

当设置`connectionIdlePollingInterval`为非空值时，引擎会轮询释放回连接池的连接。轮询过程执行阻塞读取，套接字超时设置为指定的间隔。当引擎从池中获取连接或连接被逐出并关闭时，轮询会自动取消。

当此值为`null`（默认）时，轮询处于禁用状态。远程关闭的池中的空闲连接在为后续调用获取连接时可能会遇到错误。

**注意**  
 由于轮询循环使用阻塞读取，因此获取或关闭连接的引擎调用的延迟时间可能与`connectionIdlePollingInterval`间隔一样长。为间隔选择较低的值意味着 SDK 可以更快地获取连接，但会增加空闲资源使用量。

#### 导入
<a name="http-idle-connection-ex-imports"></a>

```
import aws.sdk.kotlin.services.s3.S3Client
import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine
import kotlin.time.Duration.Companion.milliseconds
```

#### 代码
<a name="http-idle-connection-ex-code"></a>

```
S3Client.fromEnvironment {
    httpEngine(OkHttpEngine) {
        connectionIdlePollingInterval = 50.milliseconds
    }
}.use { s3 -> 
  // Use the Amazon S3 client
}
```