对于某些用户请求,我需要进行一些繁重的计算(大约需要100毫秒的时间);当然,我不想在节点的主事件循环中执行这些操作,因此它会阻止其他请求的服务。
最明显但绝对不是解决此问题最简洁的方法是将计算卸载到另一个程序并异步等待结果。
有没有办法在不离开节点进程的情况下(以及实现进程间通信)?例如。像这样的东西:
var compute = function (input) {
var i,
result = input;
for (i = 0; i < 1000000; i++) {
result = md5(result);
}
}
var controller = function (req, res) {
offload(compute, req.params.input, function(result) {
res.send(result);
});
}
答案 0 :(得分:4)
我找到了一个compute-cluster
模块,它似乎完全符合我的目标。它产生子进程,并且使用IPC进行通信(没有浪费套接字)。
答案 1 :(得分:1)
JavaScript语言不支持线程和node.js也不提供任何接口,因此您需要依赖库来提供线程功能。有关可能的解决方案,请参阅node-fibers和node-threads-a-go-go库。
如果您正在寻找一种在node.js中使IPC更容易一些的方法,那么请考虑使用zeromq library(node.js bindings)。 This somewhat-related-answer也可能有用。