You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Golang AWS SDK捕获postToConnection调用的410错误?

检测AWS SDK v2中PostToConnection的410错误

在AWS SDK for Go v2中,PostToConnection返回的410错误对应服务端的GoneException(表示连接已失效),你可以通过两种方式精准检测该错误:

方式1:断言具体异常类型

利用Go的errors.As将返回的错误断言为apigatewaymanagementapi/types.GoneException类型,这是最精准的方式:

import (
    "errors"
    "fmt"
    "context"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/service/apigatewaymanagementapi"
    "github.com/aws/aws-sdk-go-v2/service/apigatewaymanagementapi/types"
)

func sendToConnection(client *apigatewaymanagementapi.Client, connID string, data []byte) error {
    _, err := client.PostToConnection(context.TODO(), &apigatewaymanagementapi.PostToConnectionInput{
        ConnectionId: aws.String(connID),
        Data:         data,
    })
    if err != nil {
        var goneErr *types.GoneException
        if errors.As(err, &goneErr) {
            // 确认是410错误:连接已断开且未触发@disconnect
            return fmt.Errorf("connection %s is no longer valid: %w", connID, err)
        }
        // 处理其他类型的错误
        return fmt.Errorf("failed to send message: %w", err)
    }
    return nil
}

方式2:检查HTTP状态码

如果需要更通用的HTTP状态码判断,可以使用SDK提供的aws.IsHttpError函数:

import (
    "fmt"
    "context"
    "net/http"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/service/apigatewaymanagementapi"
)

func sendToConnection(client *apigatewaymanagementapi.Client, connID string, data []byte) error {
    _, err := client.PostToConnection(context.TODO(), &apigatewaymanagementapi.PostToConnectionInput{
        ConnectionId: aws.String(connID),
        Data:         data,
    })
    if err != nil {
        if aws.IsHttpError(err, http.StatusGone) {
            // http.StatusGone对应410状态码
            return fmt.Errorf("connection %s has been disconnected: %w", connID, err)
        }
        return fmt.Errorf("failed to send message: %w", err)
    }
    return nil
}

额外说明

当检测到该410错误时,说明WebSocket连接已实际断开但未触发@disconnect路由,此时你应该手动清理该连接ID的相关存储(比如从数据库、缓存中移除),避免后续无效的API调用。

内容的提问来源于stack exchange,提问作者Joey Yi Zhao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:20:10