在Nodejs中处理Fork / Spawn

时间:2018-06-13 06:37:37

标签: node.js gulp child-process

我有以下情况。我有一个在执行脚本authserver.js时运行的快速服务器。我现在要做的是使用gulp作为我想要执行的任务之一运行此脚本。我不希望父进程在forforks / spawns子进程时阻塞。我还想控制服务器脚本中的任何stdout输出。到目前为止,这是我尝试过的:

gulpfile.js

gulp.task('directory-changer', changeDirectory);
gulp.task('directory-printer', printCD);
gulp.task('server-start-daemon', compileServer);
gulp.task('mount-spwn-debugger', spwnDbg);
gulp.task('server-start-fork', srvStart);
gulp.task('default', gulp.series(['mount-spwn-debugger','directory-printer', 'server-start-fork']));
function printCD(done) {
  console.log(process.cwd());
  done();
}
function spwnDbg(done) {
var oldSpawn = child_process.execFile;
function mySpawn() {
    console.log('spawn called');
    console.log(arguments);
    var result = oldSpawn.apply(this, arguments);
    return result;
}
function srvStart(done) {
let { fork } = child_process;
let p = fork('runserverd.js');
process.send({ cmd: 'run server'});
process.on('message', m => console.log('Run server daemon: ' + m.status));
done();
}

runserverd.js

let { execFile } = require("child_process");

module.exports = (done) => {
    let prcs = 'node';
    let subprcs = execFile(prcs, ['authserver.js'], (err, stdout, stderr) => {
        if (err) {

            console.error('stderr', stderr);

            throw err;

        }

    console.log('stdout', stdout);
});
};
child_process.execFile = mySpawn;
done();
}

当我运行时,它会毫无错误地执行,但是当我尝试导航到服务器的/地址时,会出现超时(可能是因为服务器没有运行)。有没有办法做我正在尝试的事情?

0 个答案:

没有答案