1

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

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

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

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

4

1 回答 1

1

您可以制作本机 C 程序,并让节点执行二进制文件,并在完成时回调。我认为有几种方法,这是从nodejitsuchild_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可以帮助管理并发计算(和其他控制流任务)。

于 2013-04-24T18:05:35.550 回答