

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# HTTP 用戶端組態
<a name="http-client-config"></a>

根據預設， 適用於 Kotlin 的 AWS SDK 會使用以 [OkHttp](https://square.github.io/okhttp) 為基礎的 HTTP 用戶端。您可以透過提供明確設定的用戶端來覆寫 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
```

### Code
<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
```

#### Code
<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 用戶端在`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
```

##### Code
<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 **1.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
```

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

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