Node.js是否适合计算密集型Web服务

时间:2013-04-24 17:50:46

标签: multithreading apache node.js iis computation

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

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

我的理解是node.js在一个线程中运行,所以我必须编写一个node.js插件来连接我的C代码。然后,C代码必须在自己的线程中执行。我会使用node.js提供的线程池来异步运行这些计算。我会在多核机器上运行它以最大化性能。

我描述的架构是否正确并且node.js是否适合这样做? Apache或IIS在这样的应用程序上会更好吗?

1 个答案:

答案 0 :(得分: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

Node可以很好地处理apache的任务;我使用express来托管文件和动态页面;我的应用程序逻辑是当特定HTTP请求发送到特定路由时由Express调用的javascript代码。

除非您同时进行计算,否则您可能会使计算机陷入困境。我对线程池没有任何了解或评论。 caolan/async可以帮助管理并发计算(以及其他控制流任务。)