我的Meteor应用程序需要运行13个独立的服务器进程,每个进程位于setInterval
。本质上,我正在为新数据ping 13个不同的外部API,并对响应执行计算并将结果存储在Mongo中。每个过程看起来都是这样的:
Meteor.setInterval(function () {
try {
var response = Meteor.http.call("GET", <url>, {
params: <params>,
timeout: <timeout>
});
}
catch (err) {
console.log(err);
}
if (response.statusCode === 200) {
// handle the response
...
}
}, 10000);
不幸的是,在这些间隔功能中只有三个打开并且并排运行之后,Meteor窒息了。我开始在控制台中抛出socket hangup
错误和JS Allocation Failed
错误。我认为这与Node的单线程有关。有人知道这个解决方案是什么吗?我看起来很长很难......我真的想知道我是否必须将13个流程(似乎没有运行)的1个流星应用程序的后端拆分为13个流星(或Node.js应用程序) ),每个都有1个过程。谢谢!
答案 0 :(得分:0)
尝试https://atmospherejs.com/vsivsi/job-collection
优点:
可以将作业添加到队列中,并且可以精确控制成功或失败的时间......失败的作业可以轻松地重新排队。
它会自动聚集在与同一集合相关的所有Meteor进程中。
答案 1 :(得分:0)
状态更新:问题的很大一部分与Node是单线程有关。我通过将这个单片Meteor应用程序拆分为13个微服务Meteor应用程序解决了CPU限制问题,这些应用程序都连接到同一个MongoDB副本集。
这样,CPU上的所有核心都被利用,而不是Meteor试图只处理一个上的所有请求和进程。