

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

# 事件流编码
<a name="event-stream-encoding"></a>

事件流编码在客户端和服务器之间通过消息来提供双向通信。发送到 Amazon Lex V2 流式处理服务的数据帧使用此格式进行编码。来自 Amazon Lex V2 的响应也使用此编码形式。

每个消息都包含两部分：前导信息和数据。前导信息部分包含消息的总字节长度和所有标头的组合字节长度。数据部分包含标头和负载。

每个部分以 4 字节 big-endian 整数 CRC 校验和结尾。消息 CRC 校验和包括前导信息部分和数据部分。Amazon Lex V2 使用 CRC32 （通常称为 GZIP CRC32）来计算两者。 CRCs有关的更多信息 CRC32，请参阅 [https://www.ietf.org/rfc/rfc1952.txt](https://www.ietf.org/rfc/rfc1952.txt)。

总消息开销（包括前导信息和两个校验和）为 16 个字节。

下图显示了构成消息和标头的组件。每个消息有多个标头。

![](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/frame-diagram-frame-overview.png)


每个消息都包含以下组件：
+ **前导信息：**大小始终固定为 8 字节，由两个 4 字节的字段组成。
  + *第一个 4 字节：*总字节长度。这是整个消息的 big-endian 整数字节长度，包括 4 字节长度字段本身。
  + *第二个 4 字节：*标头字节长度。这是消息的标头部分的 big-endian 整数字节长度，不包括标头长度字段本身。
+ **前导信息 CRC：**消息的前导信息部分的 4 字节 CRC 校验和，不包括 CRC 本身。前导信息具有不同于消息 CRC 的 CRC，以确保 Amazon Lex V2 可以立即检测到损坏的字节长度信息，而不会导致缓冲区溢出之类的错误。
+ **标头：**用于批注消息（如消息类型、内容类型等）的元数据。消息有多个标头。标头是一些键值对，其中的键为 UTF-8 字符串。标头可按任何顺序出现在消息的标头部分中，并且任何给定标头只能出现一次。对于必需的标头类型，请参阅以下部分。
+ **负载：**发送到 Amazon Lex 的音频或文本内容。
+ **消息 CRC：**从消息开头到校验和开头的 4 字节 CRC 校验和。该消息中包含除 CRC 本身之外的所有内容。

每个标头都包含以下组件。每个帧有多个标头。
+ **标头名称字节长度：**标头名称的字节长度。
+ **标头名称：**指示标头类型的标头名称。有关有效值，请参阅下面的帧描述。
+ **标头值类型：**指示标头值类型的枚举。
+ **值字符串字节长度：**标头值字符串的字节长度。
+ **标头值：**标头字符串的值。此字段的有效值取决于标头的类型。有关有效值，请参阅下面的帧描述。