

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

# 在 Amazon Chime SDK 消息传递中使用弹性频道举办实时事件
<a name="elastic-channels"></a>

弹性频道支持拥有多达 100 万成员的大规模聊天体验。典型用途包括观看体育赛事的各方或政治事件。您只能在美国东部（弗吉尼亚州北部）区域中使用弹性频道。

弹性频道由具有通用配置的单个频道以及不同数量（或*弹性数量*）的子频道组成。该配置还包括子频道中成员的最小和最大阈值。

例如，假设您创建了一个包含 100 个子频道的弹性频道，为子频道设置了 500 个成员的低门槛和 10,000 个成员的高门槛。当用户加入此示例频道时，系统会自动将他们分配到单个子频道，直到成员人数超过 10,000。此时，系统会创建一个新的子频道，并在其中添加所有新成员。当用户离开时，系统会删除子频道，并将成员分配到其余的子频道。

将受众分成子频道可以让参与者更容易关注对话。监管人的工作量也减少了，因为他们只需要观看一些子频道。此外，监管人可以使用弹性频道提供的内置工具。例如，监管人可以[禁止用户](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelBan.html)进入频道，[创建监管人](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelModerator.html)，并使用[频道流](https://docs.aws.amazon.com/chime-sdk/latest/dg/using-channel-flows.html)自动审核频道中的所有消息。

有关 Amazon Chime SDK 消息传递限额的更多信息，请参阅*《Amazon Chime SDK 一般参考》*中的[消息传递限额](https://docs.aws.amazon.com/general/latest/gr/chime-sdk.html)。

**Topics**
+ [先决条件](#elastic-prereqs)
+ [弹性频道概念](#elastic-concepts)
+ [其他支持的功能](#additional-features)
+ [为 Amazon Chime SDK 消息传递创建弹性频道](create-elastic-channel.md)
+ [为 Amazon Chime SDK 消息传递管理弹性频道成员](manage-elastic-members.md)
+ [在 Amazon Chime SDK 消息传递中发送弹性频道消息](send-messages-elastic.md)
+ [了解 Amazon Chime SDK 会议的弹性通道中的 WebSocket 系统消息](websocket-messages-elastic.md)
+ [使用 Kinesis 流接收 Amazon Chime SDK 会议的系统消息](elastic-onboard-streams.md)
+ [在我们的演示应用程序中测试 Amazon Chime SDK 会议的弹性频道](elastic-testing.md)

## 先决条件
<a name="elastic-prereqs"></a>

您必须具备以下各项条件，才能使用弹性频道。
+ 了解 Amazon Chime SDK 消息传递功能，例如管理频道以及发送和接收消息。
+ 能够调用 Amazon Chime 软件开发工具包消息。 APIs

## 弹性频道概念
<a name="elastic-concepts"></a>

要有效地使用弹性频道，您必须了解这些概念。

**子频道**  
弹性频道将其成员划分为称为子频道的逻辑容器。当您向弹性频道添加 `AppInstanceUser` 时，用户就会成为子频道的成员。该用户可以发送和接收消息，但只能与该子频道的其他成员发送和接收消息。系统不允许来自一个子频道的消息出现在其他子频道中。

**扩展**  
为了支持用户互动，每个子频道都必须满足最低成员资格要求。您在创建弹性频道时提供该值。当用户加入或离开事件时，系统会将成员转移到不同的子频道，这使得整个频道具有“弹性”。子频道运行以下扩缩操作。  
+ **SCALE\$1OUT**：当新的弹性频道成员资格申请到来并且所有子频道都已满时，系统会通过创建一个新的子频道，然后将成员资格从现有子频道转移到新的子频道来进行扩展。
+ **SCALE\$1IN**：当子频道的成员人数低于最低要求，而另一个子频道有能力容纳第一个子频道的所有成员时，`SCALE_IN` 事件会转移这些成员资格，然后删除该子频道和所有消息。
如果您需要访问已删除的频道消息，则必须先打开消息流。有关更多信息，请参阅[在 Amazon Chime SDK 消息传递中流式传递消息数据](streaming-export.md)。

**成员传输**  
当成员资格平衡将 `AppInstanceUser` 从一个子频道转移到另一个子频道时，就会发生这种情况。传输后 `AppInstanceUser` 仍属于弹性频道。但是，新的子频道包含不同的成员资格和消息，因此转移后由 `AppInstanceUser` 发送的消息会送达上述不同成员。成员资格平衡不会影响监管人成员资格。

**注意**  
 弹性频道不支持隐藏的成员资格、成员偏好和阅读消息的时间戳。

## 其他支持的功能
<a name="additional-features"></a>

弹性频道还支持这些消息传递功能。
+ [预提取](websockets.md#prefetch)
+ [频道流](using-channel-flows.md)

# 为 Amazon Chime SDK 消息传递创建弹性频道
<a name="create-elastic-channel"></a>

您可以使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html) API 中的 `ElasticChannelConfiguration` 字段来创建弹性频道。创建弹性频道后，即可创建频道成员资格。

**注意**  
对于非弹性频道，创建频道的 `AppInstanceUser` 将作为成员和监管人自动添加到该频道。对于弹性频道，频道创建者仅作为监管人添加。
`ElasticChannelConfiguration` 设置后不可更新。
您不能将频道从弹性频道更新为非弹性频道，反之亦然。
您不能在 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannel.html)API 请求 ARNs 中包含成员列表。但是，您可以包括主持人列表 ARNs。
您不能创建 `UNRESTRICTED` 类弹性频道。

# 为 Amazon Chime SDK 消息传递管理弹性频道成员
<a name="manage-elastic-members"></a>

要管理弹性通道中的成员，请使用[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelMembership.html)、和[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelBan.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_CreateChannelBan.html) APIs。以下信息介绍了其使用方法。

**频道成员资格数**  
`CreateChannelMembership` API 创建子频道级别的成员资格。子频道包括监管人和普通成员。  
+ **监管人**：您可以将监管人添加到多个子频道。这允许监管人在他们所属的每个子频道上发送消息。向子频道添加监管人时，您必须提供 `SubChannelId`。

  如果您想自动为新的子频道分配监管人，则可以[启用消息流](streaming-export.md)，监听子频道创建事件，然后创建监管人成员资格以响应上述事件。

  最后，您可以从特定子频道或所有子频道中删除监管人。这两种操作都需要使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DeleteChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_DeleteChannelMembership.html) API。要从特定子频道中删除监管人，您需要提供 `SubChannelId`。如果您未提供子频道的 ID，系统会将监管人从所有子频道中移除。最后，您可以使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListSubChannels](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListSubChannels) API 来列出子频道以及每个子频道中的成员数量。
+ **普通成员**：占频道成员的大多数。您只能向一个子频道添加普通成员。此外，在创建或删除频道成员资格时，您无法通过 `SubChannelId`，因为是由系统来控制创建成员资格所在的子频道。

**频道的监管人数**  
`CreateChannelModerator` API 在弹性频道级别创建监管人。监管人可以查看所有子频道中的所有消息。当您将普通成员提升为频道监管人时，系统会删除该成员的所有现有频道成员资格。当您降级监管人时，也会发生同样的情况。

**频道禁令**  
`CreateChannelBan` API 在弹性频道级别创建封禁。被封禁的 `AppInstanceUser` 不属于任何子频道。当您封禁某个成员时，系统会删除该成员的所有频道成员资格。

# 在 Amazon Chime SDK 消息传递中发送弹性频道消息
<a name="send-messages-elastic"></a>

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_SendChannelMessage.html) API 在子频道级别创建消息。要发送消息，您必须要有一个 `subChannelId`。您也可以使用[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_UpdateChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_UpdateChannelMessage.html)、和[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_RedactChannelMessage.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_RedactChannelMessage.html) APIs 来编辑和删除消息，但在所有情况下，都必须有`subChannelId`。

**注意**  
只有当消息发件人属于他们向其发送消息的子频道时，他们才能编辑或编写消息。如果成员资格平衡将成员转移到另一个子频道，则该成员只能编辑或编辑他们在新的子频道中发送的消息。

# 了解 Amazon Chime SDK 会议的弹性通道中的 WebSocket 系统消息
<a name="websocket-messages-elastic"></a>

Amazon Chime SDK 会向所有连接的客户端发送系统消息，告知频道中发生的事件。下面的列表描述了弹性频道的系统消息。

**消息事件**  
弹性频道的事件有效负载包含该 `subChannelId` 字段。非弹性频道的负载保持不变。

**成员事件**  
现在，`CREATE_CHANNEL_MEMBERSHIP` 和 `DELETE_CHANNEL_MEMBERSHIP` 事件的有效负载中包含了 `subChannelId` 字段。  
弹性频道不支持该 `BATCH_CREATE_CHANNEL_MEMBERHSIP` 事件。当您调用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_BatchCreateChannelMembership.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_BatchCreateChannelMembership.html) API 时，系统会发送单个 `CREATE_CHANNEL_MEMBERSHIP` 事件。  
现在，您可以使用 `UPDATE_CHANNEL_MEMBERSHIP` 事件类型来表示成员资格信息的变化。例如，在成员从一个子频道转移到另一个子频道期间，系统会发送一个有效负载中包含新 `SubChannelId` 的 `UPDATE_CHANNEL_MEMBERSHIP` 事件，以表明该成员已被转移。  
系统仅将 `UPDATE_CHANNEL_MEMBERSHIP` 事件发送给被转移的成员，而不会发送给子频道的其他成员。因此，我们鼓励您使用 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelMemberships.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_messaging-chime_ListChannelMemberships.html)API，而不是填充频道会员名单。 WebSockets 有关更多信息，请参阅[WebSockets 用于在 Amazon Chime 软件开发工具包消息中接收消息](websockets.md)。

# 使用 Kinesis 流接收 Amazon Chime SDK 会议的系统消息
<a name="elastic-onboard-streams"></a>

您可以配置 `AppInstance`，从而以流的形式接收数据。例如，流可以包含消息、子频道事件和频道事件。

作为其中的一部分，我们支持 `CREATE_SUB_CHANNEL` 和 `DELETE_SUB_CHANNEL` 事件。它们表示作为成员资格平衡的一部分何时创建或删除子频道。有关接收数据流的更多信息，请参阅 [在 Amazon Chime SDK 消息传递中流式传递消息数据](streaming-export.md)。

# 在我们的演示应用程序中测试 Amazon Chime SDK 会议的弹性频道
<a name="elastic-testing"></a>

[你可以在/上测试所有 Amazon Chime SDK 消息传递功能 GitHub 。https://github.com/aws-samples/ amazon-chime-sdk tree/main/apps/chat](https://github.com/aws-samples/amazon-chime-sdk/tree/main/apps/chat)