API Gateway 中的 WebSocket API 概览 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

API Gateway 中的 WebSocket API 概览

在 API Gateway 中,您可以创建 WebSocket API 作为Amazon服务(如 Lambda 或 DynamoDB)或 HTTP 终端节点的有状态前端。WebSocket API 根据从客户端应用程序收到的消息内容来调用您的后端。

与接收和响应请求的 REST API 不同,WebSocket API 支持客户端应用程序与后端之间的双向通信。后端可以向连接的客户端发送回调消息。

在 WebSocket API 中,传入的 JSON 消息将根据您配置的路由定向到后端集成。(非 JSON 消息将定向到您配置的 $default 路由。)

路由包含一个路由键,这是在评估路由选择表达式时预期的值。routeSelectionExpression 是在 API 级别定义的属性。它指定了预期存在于消息负载中的 JSON 属性。有关路由选择表达式的更多信息,请参阅路由选择表达式

例如,如果您的 JSON 消息包含一个 action 属性,并且您想要根据此属性执行不同操作,则您的路由选择表达式可能是 ${request.body.action}。您的路由表将通过将 action 属性的值与您在表中定义的自定义路由键值相匹配来指定要执行的操作。

为 WebSocket API 使用路由

可以使用三个预定义路由:$connect$disconnect$default。此外,您还可以创建自定义路由。

  • API Gateway 会在客户端和 WebSocket API 之间的持久连接处于启动状态时调用 $connect 路由。

  • API Gateway 会在客户端或服务器与 API 断开连接时调用 $disconnect 路由。

  • 如果找到匹配的路由,则 API Gateway 会在针对消息评估路由选择表达式之后调用自定义路由;匹配项确定调用哪个集成。

  • 如果无法针对消息评估路径选择表达式或未找到匹配的路由,则 API Gateway 会调用 $default 路由。

有关 $connect$disconnect 路由的更多信息,请参阅管理连接的用户和客户端应用程序:$connect 和 $disconnect 路由

有关 $default 路由和自定义路由的更多信息,请参阅在 API Gateway 中调用与 $default 路由和自定义路由的后端集成

向连接的客户端应用程序发送数据

后端服务可以将数据发送到连接的客户端应用程序。可以通过执行以下操作来发送数据:

  • 使用集成可发送响应,该响应通过您定义的路由响应返回到客户端。

  • 您可以使用 @connections API 发送 POST 请求。有关更多信息,请参阅 在后端服务中使用 @connections 命令

WebSocket API 状态代码

API Gateway WebSocket API 对于从服务器到客户端的通信使用以下状态代码,如 WebSocket Close Code Number Registry 中所述:

1001

当客户端闲置 10 分钟或达到最长 2 小时的连接生命周期时,API Gateway 将返回此状态代码。

1003

当端点收到二进制媒体类型时,API Gateway 将返回此状态代码。WebSocket API 不支持二进制媒体类型。

1005

如果客户端发送一个没有关闭代码的关闭帧,API Gateway 将返回此状态代码。

1006

如果连接意外关闭(例如 TCP 连接在没有 WebSocket 关闭帧的情况下关闭),API Gateway 将返回此状态代码。

1008

当端点收到来自特定客户端的过多请求时,API Gateway 将返回此状态代码。

1009

当端点收到的消息太大而无法处理时,API Gateway 将返回此状态代码。

1011

当服务器出现内部错误时,API Gateway 将返回此状态代码。

1012

如果服务重新启动,API Gateway 将返回此状态代码。