2013-04-24 56 views
1

我将创建一组包含非常计算密集型代码的Web服务。计算可以从1/2秒到20秒运行。计算存在于C代码中。Node.js适用于计算密集型Web服务

我可能不会有超过20个同时发生的Web服务请求,其中只有一对是较长的运行计算。

我的理解是node.js运行在一个单独的线程中,所以我将不得不编写一个node.js插件,它将连接到我的C代码。 C代码然后必须在它自己的线程中执行。我将使用node.js提供的线程池异步运行这些计算。我会在多核心机器上运行此功能以最大限度地提高性能。

我描述的体系结构是否正确并且是否适合Node.js?在这样的应用程序中,Apache或IIS会更好吗?

回答

1

您可以制作一个本地C程序,并让节点执行二进制文件,并在完成时执行回调。我觉得有几个方法,下面是nodejitsu复制的child_process.exec(command, [options], callback)一个例子:

var childProcess = require('child_process'), 
    ls; 

ls = childProcess.exec('ls -l', function (error, stdout, stderr) { 
    if (error) { 
    console.log(error.stack); 
    console.log('Error code: '+error.code); 
    console.log('Signal received: '+error.signal); 
    } 
    console.log('Child Process STDOUT: '+stdout); 
    console.log('Child Process STDERR: '+stderr); 
}); 

ls.on('exit', function (code) { 
    console.log('Child process exited with exit code '+code); 
}); 

编辑
如果需要启动它后,通过输入到你的过程中,使用child_process.spawn代替。

节点可以很好地处理Apache的任务;我使用express来托管文件和动态页面;我的应用程序逻辑是当特定的HTTP请求被做成特定路由时由Express调用的JavaScript代码。

除非限制同时计算,否则可能会使机器停止工作。我对线程池没有任何知识或评论。 caolan/async可以帮助管理并发计算(和其他控制流任务)。

+0

这似乎只适用于独立的可执行文件?我真的需要能够调用一个函数并传入并获取复杂的数据。有没有办法做到这一点? – user265445 2013-05-01 09:37:47

+0

我认为这是可能的,我没有任何进一步的知识 - gl! – Plato 2013-05-01 16:40:35