【问题标题】:Spawning child processes in an express server在快速服务器中生成子进程
【发布时间】:2012-06-07 20:40:53
【问题描述】:

在我的快速服务器中,我需要将一些功能作为子进程运行,否则它们会占用服务器并且其他人将无法访问它。他们已经在使用 async 模块,但除非它们作为子进程运行,否则它们仍会占用服务器。

一个问题是将 req 和 res 参数传递给它们。

如何做到这一点?

【问题讨论】:

    标签: javascript web-services node.js asynchronous process


    【解决方案1】:

    使用child_process.fork,您可以向子进程发送消息。

    编辑:我错误地建议将reqres 作为消息参数传递给子进程。这是不可能的,因为所有进出子进程的消息都转换为 JSON。相反,您可以在服务器中保留某种队列。以下仅作为示例,您可能需要更健壮的内容:

    child.js:

    process.on('message', function(message) {
        // Process data
    
        process.send({id: message.id, data: 'some result'});
    });
    

    server.js:

    var child_process = require('child_process');
    var child = child_process.fork(__dirname + '/child.js');
    var taskId = 0;
    var tasks = {};
    
    function addTask(data, callback) {
        var id = taskId++;
    
        child.send({id: id, data: data});
    
        tasks[id] = callback;
    };
    
    child.on('message', function(message) {
        // Look up the callback bound to this id and invoke it with the result
        tasks[message.id](message.data);
    });
    
    app.post('/foo', function(req, res) {
        addTask('some data', function(result) {
            res.send(result);
        });
    });
    

    这有点复杂,但应该可以。您可能会很快摆脱这样的系统,并且可能会通过适当的队列得到更好的服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-28
      • 2018-04-12
      • 1970-01-01
      • 2018-05-13
      • 2013-05-03
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多