Вопрос по web-services, node.js, asynchronous, javascript – Порождение дочерних процессов на экспресс-сервере

4

В моем экспресс-сервере есть некоторые функции, которые мне нужно запускать как дочерние процессы, потому что в противном случае они свяжут сервер, и другие люди не смогут получить к нему доступ. Они уже используют асинхронный модуль, но все равно связывают сервер, если они не запускаются как дочерние процессы.

Одной из проблем является передача им параметров req и res.

Как это может быть сделано?

Ваш Ответ

1   ответ
13

Child_process.fork, вы можете отправлять сообщения дочерним процессам.

Редактировать Я неправильно посоветовал пройтиreq а такжеres как параметры сообщения для дочернего процесса. Это невозможно, поскольку все сообщения дочерних процессов и из них преобразуются в 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);
    });
});

Это немного сложнее, но должно сработать. Вы можете быстро вырасти из такой системы, и вам может быть лучше обслуживать правильную очередь.

Когда я пытаюсь передать команду req, выдает ошибку sayt node ninja

Похожие вопросы