2013-07-13 3 views
2

계산 집약적 인 부분이있는 곳에 응용 프로그램이 있습니다. 이 계산을 백그라운드 작업으로 옮기고 완료 될 때 주 Node.js 스레드에 알리고 싶습니다. Node Background Task, ClusterHub, Node Threads A-Go-Go을 비롯한 여러 가지 가능한 솔루션이 있으며 그 밖에도 여러 가지 솔루션이 있다고 확신합니다.Node.js 백그라운드 작업

누구나이 경험이 있으며 해결책을 추천 할 수 있습니까?

감사합니다, 존

답변

0

프로세스는 당신이 같은 배경 데몬을 자동으로 respawning과 같은 특별한 기능을 필요로하지 않는 한 라이브러리 나 NPM 모듈을 래핑하는 문제 가치가 없어 충분히 간단하다. 내장 된 노드 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 
}); 

이 (필자는 NPM 모듈 'Q를 추천 약속을 사용하는 것을 고려 'by kriskowal.) 작업이 시작될 때 약속을 작성하고 완료되면 ("close"이벤트 핸들러에서)이를 확인/거부하면 백그라운드 작업이 완료된 후 후속 작업을 수행 할 수있는 깨끗하고 예측 가능한 방법이됩니다.

+1

스폰 할 프로세스가 다른 노드 스크립트 인 경우 spawn() 대신 child_process.fork()를 사용하는 것이 좋습니다. 그것들은 기본적으로 같은 일을하지만 fork()는 자식 프로세스가 부모에게 데이터를 다시 보내는 데 사용할 통신 채널을 자동으로 설정합니다. –