amazon-web-services - 是否可以让 AWS Websocket + Lambda 函数持续监控 DynamoDB 并向客户端发送响应?
问题描述
我有一个无服务器项目:前端的 AWS + Angular。目前,我在页面初始化时获取数据,并在按下“更新”按钮时刷新数据。但是,我想不断地监视表中的变化。在 Firebase 中,有一种onSnapShot()
方法可以在更新集合时发送新数据。
我想用 AWS 做一些类似的事情。但是,在官方文档中,我看不到如何正确地做到这一点。
所以这里有2个问题:
- 如何使用 aws-sdk 连接到 WebSocket?(目前,我只能通过
wscat -c myurl
电话从终端连接。或者我应该简单地发送带有 websocket url 的 http.Post 吗? - 是否可以在回调 URL 中传递调用?- 我想在页面初始化时从 DynamoDB 获取数据,然后一次又一次地调用它(使用回调 URL)
我的 Lambda 函数如下所示:
exports.handler = async (event, context) => {
let params = {
TableName: "documents"
}
let respond = await db.scan(params).promise();
return respond;
};
在前端我有:
ngOnInit(): void {
AWS.config.credentials = new AWS.Credentials({
accessKeyId: '//mykey', secretAccessKey: '//mysecretkey'
})
AWS.config.update({
region:'//myregion'
})
this.updateTable() // triggers post request to APi Gateway => lambda and receives a response with data.
}
解决方案
据我了解,您将需要设置一个 DynamoDB 流和一个 lambda 函数来响应数据库 CRUD 事件,如果事件数据符合条件(例如文档 ID),则将更新的数据发送到 WebSocket 连接,通过AWS.ApiGatewayManagementApi
. (仅供参考:https ://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ApiGatewayManagementApi.html )
推荐阅读
- watson-studio - 如何在 Watson Studio Modeler Flow 中预测时间序列的动态数量
- laravel - 如何使用“Laravel Follow”解决此错误
- javascript - 如何实现类似于 Slither.io 的相机/运动风格?
- rust - 在 NEAR 区块链上使用合约名称调用 nft_transfer?
- javascript - 消息收集器响应其他人的消息
- c - yacc 中的默认数据类型
- python - 如何在 python 中模拟烧瓶请求来测试我的程序?
- angular - 不能将 .some() 与对象数组一起使用
- sql - 我想将 int 呈现为 hh:mm:ss 格式
- javascript - 如何限制html中的字符串长度