5

对于一些用户请求,我需要做一些繁重的计算(大约需要 100ms 的时间);当然,我不想在节点的主事件循环中执行这些操作,以免阻止其他请求提供服务。

解决此问题的最明显但绝对不是最干净的方法是将计算卸载到另一个程序并异步等待结果。

有没有办法在不离开节点进程(并实现进程间通信)的情况下做到这一点?例如这样的:

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);
    });
}
4

2 回答 2

4

我找到了一个compute-cluster模块,它似乎是为我的目标而设计的。它产生子进程,并使用 IPC 进行通信(不浪费套接字)。

于 2012-05-18T05:35:37.310 回答
1

JavaScript 语言不支持线程,并且 node.js 也不为它们提供接口,因此您需要依赖库来提供线程功能。有关可能的解决方案,请参阅node-fibersnode-threads-a-go-go库。

如果您正在寻找一种在 node.js 中使 IPC 更容易的方法,请考虑使用zeromq 库node.js 绑定)。 这个有点相关的答案也可能有用。

于 2012-05-17T19:05:50.567 回答