在快速服务器中生成子进程

Spawning child processes in an express server

本文关键字:子进程 服务器      更新时间:2023-09-26

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

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

如何做到这一点?

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

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

儿童.js:

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

服务器.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);
    });
});

它涉及更多,但它应该有效。您可能会很快摆脱这样的系统,并且可以通过适当的队列更好地服务。