我将创建一组包含非常计算密集型代码的Web服务。计算可以从1/2秒到20秒运行。计算存在于C代码中。
我可能不会有超过20个同时发生的Web服务请求,其中只有一个是更长时间运行的计算。
我的理解是node.js在一个线程中运行,所以我必须编写一个node.js插件来连接我的C代码。然后,C代码必须在自己的线程中执行。我会使用node.js提供的线程池来异步运行这些计算。我会在多核机器上运行它以最大化性能。
我描述的架构是否正确并且node.js是否适合这样做? Apache或IIS在这样的应用程序上会更好吗?
答案 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可以帮助管理并发计算(以及其他控制流任务。)