如何使用Amazon API Gateway WebSocket API 解决 410 GoneException 错误?
上次更新日期:2022 年 11 月 3 日
在尝试向我的Amazon API Gateway WebSocket API 发布消息时出现了“410 GoneException”错误,如下所示:
... "errorMessage": "GoneException: 410" ...
如何解决此问题?
简短描述
在以下情况下,您可能会收到“410 GoneException”错误:
- 在建立连接之前,已向 WebSocket API 发布了一条消息。
- 连接已终止,或者连接已不存在。
- 客户端断开连接,然后尝试使用相同的 connectionId 重新连接。
Note:对于 WebSocket API,需要使用 connectionId 才能从后端发送回调响应。
解决方法
要解决 WebSocket API 错误,请开启 Amazon CloudWatch Logs。
注意:对于 Log level(日志级别),选择 INFO(信息)以针对所有请求生成执行日志。
执行日志包含可用于识别和排查大多数 API 错误的信息。例如:
- 您的 API 接收到的请求
- 来自您的 API 的集成后端响应
- 由 AWS Lambda 授权方提供的响应
- AWS 集成端点的 requestId
有关每种日志记录类型的更多信息,请参阅 API Gateway 的 CloudWatch 日志格式。
在向 WebSocket API 发布消息之前,请确保通过使用 AWS SDK ApiGatewayManagementApi 调用 getConnection 操作来建立连接。
避免从与您的 $connect 路由集成的 Lambda 函数发出 postToConnection 请求。例如,如果您想在建立客户端连接后发布消息,请执行以下操作:
- 创建由父函数异步调用的子 Lambda 函数。
- 在启动新连接时,调用 $connect 路由,父函数调用传递 connectionId 的子函数。
- Lambda 子函数接收 connectionId 并调用 getConnection 操作以验证连接是否有效。然后,使用 postToConnection 方法发送消息。