我有一个AWS lambda函数,可以将push发送到这样的设备:
var push = function(payload, ctx){
var apn = require('apn');
var connection = new apn.Connection(options);
var token = "(MY TOKEN HERE)";
var device = new apn.Device(token);
var note = new apn.Notification();
note.expiry = Math.floor(Date.now() / 1000) + 3600;
note.badge = 3;
note.sound = "ding.wav";
note.alert = "Hello";
note.payload = payload;
connection.on('transmitted', function(){
ctx.succeed({ "response": "OK" })
});
connection.pushNotification(note, device);
}
现在我想扩展它,以便我可以向一组设备发送广播推送。
起初我认为将它们全部置于for循环中会很简单,但是第二次认为它不起作用,因为ctx.succeed
部分在发送完所有推送之前不应该返回。此外,如果我等到所有推送都已发送,那么请求将花费太长时间甚至可能超时。
执行大量并发请求的正确方法是什么?
答案 0 :(得分:0)
您需要查看Async library for NodeJS。这在NodeJS中很常见,而不仅仅是在AWS Lambda函数中。在Lambda中,您将使用它来执行许多异步任务,并等待所有异步调用完成后再调用ctx.succeed()
。
对于一百万个电话,您仍然需要批量调用。我认为您应该考虑将所有这些任务添加为Kinesis stream中的项目,然后可以将这些任务的批量发送到您的Lambda函数。它可以配置为启动Lambda函数的许多并发实例,每个实例处理一个批处理。