如何使用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 Gateway 的 CloudWatch 日志格式

在向 WebSocket API 发布消息之前,请确保通过使用 AWS SDK ApiGatewayManagementApi 调用 getConnection 操作来建立连接。

避免从与您的 $connect 路由集成的 Lambda 函数发出 postToConnection 请求。例如,如果您想在建立客户端连接后发布消息,请执行以下操作:

  1. 创建由父函数异步调用的子 Lambda 函数。
  2. 在启动新连接时,调用 $connect 路由,父函数调用传递 connectionId 的子函数。
  3. Lambda 子函数接收 connectionId 并调用 getConnection 操作以验证连接是否有效。然后,使用 postToConnection 方法发送消息。