【问题标题】:Is Node.js suited for compute intensive web servicesNode.js 是否适合计算密集型 Web 服务
【发布时间】:2013-04-18 09:52:47
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: multithreading apache node.js iis computation


    【解决方案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 可以帮助管理并发计算(和其他控制流任务)。

    【讨论】:

    • 这似乎只适用于独立的可执行文件?我真的需要能够调用一个函数并传入和取回复杂的数据。有没有办法做到这一点?
    • 我认为这是可能的,不过我对此一无所知 - gl!
    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 2011-10-11
    • 2012-08-09
    • 2015-07-18
    • 2018-12-09
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多