您可以从非 websocket lambda 向 websocket 客户端发送消息吗?

MrS*_*erq 5 amazon-web-services websocket node.js aws-lambda

我设置了一个nodejs websocket AWS lambda端点(Api网关),它连接并可以回显消息。在初始连接期间,我将端点和 connection_id 保存到数据库中。这样就可以保存下来了。如果我打开浏览器客户端并连接到 websocket 端点,我可以成功连接,并成功从浏览器发送消息 - 我有代码来回显消息,并且它可以工作。

现在,在另一个提供 REST 端点的 Nodejs lambda 中,我有代码从数据库加载 connection_id 并执行以下操作:

// 'connection' is loaded successfully from DB (I log it and see the right values)
let api = new AWSSDK.ApiGatewayManagementApi({apiVersion: '2018-11-29', endpoint: connection.endpoint});

await api.postToConnection({
                ConnectionId: connection.connection_id,
                Data: JSON.stringify({ message: 'Hello World' })
            }).promise();
Run Code Online (Sandbox Code Playgroud)

但是,REST 端点中的代码(上面的代码)始终在 postToConnection 中收到 410 错误。我知道连接仍然处于活动状态,因为我可以在测试上面的 REST API 之前连接到它并在浏览器客户端中 ping 它。

是否无法从非 websocket lambda 发布到 websocket 连接?

小智 3

我认为您应该使用它从后端向您的客户发送消息。

要将回调消息发送到客户端,请使用:

POST https://{api-id}.execute-api.us-east-1.amazonaws.com/{stage}/@connections/{connection_id}

https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-how-to-call-websocket-api-connections.html