如何让我的节点应用程序同时执行1000次异步操作?

时间:2015-04-23 17:16:37

标签: javascript node.js asynchronous sails.js

用户输入站点地图后,这是我希望我的节点应用程序执行的过程。

1)抓取站点地图中的所有网址

2)访问每个网址并提取元数据(使用cheerio) - 并保存到数据库

3)获取每个网址的社交计数并保存到数据库

4)再次访问每个网址,并从网址

中提取链接

5)访问网址发出的每个链接,并检查状态代码并保存到数据库

我为上述每个步骤(使用异步模块)编写了控制器操作,并且他们单独正常工作,但是当有大型网站时,步骤#4可以达到20k或者30k个不同的网址,然后第5步实际访问它们会导致相当多的503错误,如果setTimeout不够快所以我的问题是,什么是执行上述过程的最佳方式?

正在和一位朋友交谈,他建议我调查Kue或RabbitMQ,但是我从未使用任何这样的基于队列的模块,所以考虑到我想要实现的目标,不太确定是什么最好的方法是

对上述内容的反馈意见非常好

1 个答案:

答案 0 :(得分:2)

编辑:我刚刚意识到你想要添加一个动态队列,因为你已经在队列中了...对不起之前的长响应。看看async.queue(),它可能会让你朝着正确的方向前进。还可以查看一个带有子进程的Redis队列(redis-dist-job-queue,也许?),可能看看kju,虽然Kue看起来也是一个不错的选择。 RabbitMQ看起来像是一个完整的消息传递服务,对于你正在寻找的东西可能有点过分。