go - AWS API Gateway WebSockets [POST] @connections返回404未找到

标签 go websocket connection http-status-code-404 aws-api-gateway

我将一个(或几个)客户端连接到API Gateway中的websockets端点。
Using wscat
然后,我尝试使用以下准则将消息发布回客户端:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-how-to-call-websocket-api-connections.html

// Send sends a message to a connection ID.
func Send(domain, stage, connectionID, message string) (events.APIGatewayProxyResponse, error) {
    session := session.Must(session.NewSession())
    endpoint := fmt.Sprintf("https://%s/%s/@connections/%s", domain, stage, connectionID)
    apiClient := apigatewaymanagementapi.New(session, aws.NewConfig().WithEndpoint(endpoint))
    connectionInput := apigatewaymanagementapi.PostToConnectionInput{
        ConnectionId: aws.String(connectionID),
        Data:         []byte(message),
    }
    _, err := apiClient.PostToConnection(&connectionInput)

    if err != nil {
        fmt.Println(err.Error())

        return events.APIGatewayProxyResponse{StatusCode: 500}, err
    }

    return events.APIGatewayProxyResponse{StatusCode: 200}, nil
}
不管是在本地调用Send函数还是客户端发送消息都没有关系,API Gateway会调用我的publish Lambda,在其中我遍历连接并为每个连接调用Send。
结果总是一样的。
NotFoundException: 
    status code: 404, request id: 7bb1546a-c2a7-4e98-92a0-fcc7ae175d7c
我尝试过的事情:
  • 转义的@connections和实际的connectionID
  • 确保客户端连接尚未超时
  • 确保我的环境变量
  • 中具有正确的AWS凭证
  • 确保我的Lambda有权调用API网关
  • 确保端点的格式正确:https://{api-id}.execute-api.{region}.amazonaws.com/{stage}/@connections/{connection_id}

  • 如何成功向客户端发送消息?

    最佳答案

    原来这条线endpoint := fmt.Sprintf("https://%s/%s/@connections/%s", domain, stage, connectionID)需要变成这个endpoint := fmt.Sprintf("https://%s/%s/", domain, stage)

    关于go - AWS API Gateway WebSockets [POST] @connections返回404未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64562442/

    相关文章:

    ssl - Golang : how to specify certificate in TLS config for http client

    go - 我的 div(4,2) 程序应该返回 (0, true) 而 div(4,3) 应该返回 (1, false) 给出错误

    javascript - 如果 WebSocket 事件监听器在事件触发后注册,为什么它们会起作用?

    mysql - 与 MySQL 服务器的 10 个并发连接是否足够?

    java - 重定向 TCP 连接

    mysql - 通过向 dst 和 src 发送 RST 来强制关闭 TIME_WAIT 连接?

    戈朗 : How to get computing time using pprof within a web server

    go - 具有相似元素类型的 slice 之间的转换

    entity-framework - 如何在 websocket symfony 应用程序的服务中使用实体、表单、 Controller

    PHP Web 套接字无法在 SSL 中连接