

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

# 设备连接状态查询
<a name="device-connectivity-status"></a>

AWS IoT Fleet Indexing 支持单个设备连接查询，使您可以高效地检索特定设备的连接状态和相关元数据。此功能是对现有全实例集范围索引和查询能力的补充。

## 工作原理
<a name="w2aac37c21b5"></a>

设备连接查询支持可用于优化的单设备连接状态检索。此 API 提供对最新设备特定连接信息的低延迟、高吞吐量访问。一旦启用连接索引，您将可以访问此查询 API，该 API 将按标准查询收费。有关更多信息，请参阅 [AWS IoT 设备管理定价](https://aws.amazon.com/iot-device-management/pricing/#:~:text=Search%20queries%20(per%2010%2C000%20queries))。

## 功能
<a name="w2aac37c21b7"></a>

借助设备连接查询支持，您可以：

1. 使用设备的 `thingName` 查询其当前连接状态（已连接或已断开连接）。

1. 检索其他连接元数据，包括：

   1. 断开连接原因

   1. 最近连接或断开连接事件的时间戳。

**注意**  
实例集索引对设备的连接状态编制索引，该设备的连接 `clientId` 与[注册表](https://docs.aws.amazon.com/iot/latest/developerguide/thing-registry.html)中已注册事物的 `thingName` 相同。

## 优势
<a name="w2aac37c21b9"></a>

1. **低延迟：**反映最新的设备连接状态，并提供低延迟以反映来自 IoT Core 的连接状态变化。IoT Core 判定设备断开连接的情况有两种：一是设备主动发送断开连接请求，二是设备未发送断开连接请求而断开。IoT Core 将等待配置的保活时间的 1.5 倍后，才判定客户端已断开连接。连接状态 API 通常在 IoT Core 判定设备连接状态改变后一秒内反映这些变化。

1. **高吞吐量：**默认支持每秒 350 个事务（TPS），并可应要求调整至更高。

1. **数据保留：**启用舰队索引 (FI) ConnectivityIndexing 模式且事物未被删除时，可以无限期存储事件数据。如果禁用连接索引，记录将不会被保留。

**注意**  
如果在此 API 启动之前已启用连接状态索引，则实例集索引会在 API 启动后开始跟踪连接状态变化，并基于这些变化反映更新后的状态。

## 先决条件
<a name="w2aac37c21c11"></a>

要使用设备连接查询支持，请执行以下操作：

1. [设置一个 AWS 账户](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html)

1.  AWS IoT Core 在您的首选地区注册设备并将其注册到该区域

1. [启用实例集索引](https://docs.aws.amazon.com/iot/latest/developerguide/managing-index.html)并开启连接索引

**注意**  
如果已经启用了连接索引，则无需额外设置。

有关详细的设置说明，请参阅[《AWS IoT 开发人员指南》](https://docs.aws.amazon.com/iot/latest/developerguide/setting-up.html)

## 示例
<a name="w2aac37c21c13"></a>

```
aws iot get-thing-connectivity-data --thing-name myThingName
```

```
{
   "connected": true,
   "disconnectReason": "NONE",
   "thingName": "myThingName",
   "timestamp": "2024-12-19T10:00:00.000000-08:00"
}
```
+ `thingName`：请求指示的设备名称。这也与用于连接到 AWS IoT Core的 clientId 相匹配。
+ `disconnectReason`：断开连接的原因。对于已连接的设备，此值为 NONE。
+ `connected`：布尔值 true，表示此设备当前已连接。
+ `timestamp`：表示设备最近断开连接时间的时间戳（毫秒）。

```
aws iot get-thing-connectivity-data --thing-name myThingName
```

```
{
   "connected": false,
   "disconnectReason": "CLIENT_INITIATED_DISCONNECT",
   "thingName": "myThingName",
   "timestamp": "2024-12-19T10:30:00.000000-08:00"
}
```
+ `thingName`：请求指示的设备名称。这也与用于连接到 AWS IoT Core的 clientId 相匹配。
+ `disconnectReason`: 断开连接的原因是 CLIENT\$1INITIATED\$1DISCONNECT 表示客户端将断开连接。 AWS IoT Core 
+ `connected`：布尔值 false，表示此设备当前已断开连接。
+ `timestamp`：表示设备最近断开连接时间的时间戳（毫秒）。

```
aws iot get-thing-connectivity-data --thing-name neverConnectedThing
```

```
{
   "connected": false,
   "disconnectReason": "UNKNOWN",
   "thingName": "neverConnectedThing"
}
```
+ `thingName`：请求指示的设备名称。这也与用于连接到 AWS IoT Core的 clientId 相匹配。
+ `disconnectReason`：断开连接的原因。对于从未连接过的设备或实例集索引未存储最后断开连接原因的设备，此值为“UNKNOWN”。
+ `connected`：布尔值 false，表示此设备当前已断开连接。
+ `timestamp`：对于从未连接过的设备或实例集索引未存储最后时间戳的设备，不返回时间戳。