gpt4 book ai didi

node.js - 使用 Amazon SQS 完成 Lambda 函数时通知浏览器客户端

转载 作者:IT老高 更新时间:2023-10-28 23:21:37 26 4
gpt4 key购买 nike

在我的场景中,我正在尝试实现运行相当耗时的计算的无服务器后端。此计算由引用一些外部 API 的 Lambda 管理。

为了请求这个,我使用了 Amazon API Gateway,它有 10 秒的执行限制。然而 Lambda 运行大约 100 秒。

为了避免这个限制,我使用第二个 Lambda 函数来执行这个耗时的计算并报告计算已开始。

我看起来很像这个:

var AWS = require('aws-sdk');
var colors = require('colors');

var functionName = 'really-long'

var lambda = new AWS.Lambda({apiVersion: '2015-03-31'});

var params = {
FunctionName: functionName,
InvocationType: 'Event'
};


lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(functionName.green + " was successfully executed and returned:\n" + JSON.stringify(data, null, 2).gray); // successful response
});

console.log("All done!".rainbow);

此代码由数千个客户端浏览器通过 AWS API Gateway 独立执行。

为了通知每个特定客户他的 Lambda 函数执行已成功完成,我计划使用 AWS SQS(因为长轮询和其他一些开箱即用的有用功能)。

所以我的问题是:

如何在客户端上确定队列中的哪条消息属于该特定客户端?或者我应该遍历所有队列以通过每个客户端浏览器中的某些请求 ID 参数找到正确的消息?我想当 1000 个客户同时等待他们的结果时,这种方法效率低下。


我知道我可以将结果写入 DynamoDB,并通过一些自制的 API 定期轮询 DB 以获取结果。但是是否有任何优雅的解决方案来通知基于浏览器的客户端有关基于某些 Amazon PaaS 解决方案的耗时 Lambda 函数的执行完成?

最佳答案

老实说,DynamoDB 路线可能是您最好的选择。您可以在 API Gateway 执行的第一个 Lambda 函数中生成一个 uuid。将该 uuid 传递给长时间运行的 Lambda 函数。在第二个函数完成之前,将其写入包含两列的 DynamoDB 表:uuidresult

API 网关使用它生成的 uuid 响应客户端。然后,客户端对您的 DynamoDB 表使用 getItem 请求进行长轮询(直接通过 aws-sdk 或通过另一个 API Gateway 请求)。成功响应后,从 DynamoDB 表中删除该项目。

关于node.js - 使用 Amazon SQS 完成 Lambda 函数时通知浏览器客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33245690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com