2013-07-13 2 views
2

У меня есть приложение, где есть часть, которая является интенсивной с вычислительной точки зрения. Я хотел бы переместить это вычисление в фоновое задание и сообщить ему о главном потоке Node.js, когда он будет завершен. Я вижу ряд возможных решений, включая Node Background Task, ClusterHub, Node Threads A-Go-Go, и я уверен, что есть другие.Node.js фоновые задачи

У кого-нибудь есть опыт работы с этим и может порекомендовать решение?

Спасибо, Джон

ответ

0

процессы достаточно просто, что это не стоит того, чтобы обернуть их с модулем библиотеки или НПМ, если вы не нужны специальные функции, такие как автоматические паки фоновых демонов. Встроенный в Node API «child_process» обрабатывает процессы, и использовать его просто:

var childProcess = require("child_process");   

var child = childProcess.spawn("/usr/bin/uname", ["-a"]); 

child.stdout.setEncoding("utf8"); 
child.stderr.setEncoding("utf8"); 

var stdoutBuffer = "", stderrBuffer = ""; 

child.stdout.on("data", function(data){stdoutBuffer += data;}); 
child.stderr.on("data", function(data){stderrBuffer += data;}); 

child.on("close", function(code) 
{ 
    //the process exited with code `code` 

    console.log("Stdout:", stdoutBuffer); 

    process.exit(code); //bubble up the exit code 
}); 

Если вам нужен заказ независимого асинхронный поток управления, следует использовать обещание (я рекомендую модуль НОГО 'д 'by kriskowal.) Создание обещания при запуске вашей задачи и ее разрешении/отклонении по завершении (в обработчике событий «закрыть») обеспечит чистый и предсказуемый способ выполнения последующих задач после выполнения фонового задания.

+1

Стоит отметить, что если процесс, который вы собираетесь создавать, - это еще один скрипт узла, вы можете использовать child_process.fork() вместо spawn(). Они в основном делают то же самое, но fork() автоматически настраивает канал связи для дочернего процесса, который будет использоваться для отправки данных обратно родителям. –

Смежные вопросы