简体   繁体   English

如何从Node.js中的子进程捕获响应

[英]How to capture response from child process in nodejs

I am trying to capture some response from my child process in master process. 我试图从主流程的子流程中获取一些响应。 I can log information of child process in master process but unable to capture some return xyz response . 我可以在主进程中记录子进程的信息,但无法捕获一些返回的xyz响应。 Here is code for master process: 这是主流程的代码:

var express  = require('express');
var app = express();
const
             fs = require('fs'),
             cp = require('child_process');
 app.get('/',onRequest );
    function onRequest(request, response) {
                var express  = require('express');
             var app = express();

            var child= cp.spawn('node' ,['./child_process/block.js'],filestreamCallback);
            child.stdout.on('data', function(data) {
                console.log('stdout: ==== ' + data);
            });
            child.stderr.on('data', function(data) {
                console.log('stdout: ' + data);
            });
            child.on('close', function(code) {
                console.log('closing code: ' + code);
            });
        function filestreamCallback() {
                response.writeHead(200, {'Content-Type': 'text/plain'});
                baflog.info("Reading Stream completed");
                response.write('Thanks for Your patience!\n');
                response.end();
            }
        }
        app.listen(5000);
        console.log('Server started');

Child process : block.js

        /*Keep waiting for 10 seconds*/

    console.log("Waiting for child Process (block.js) to complete......");
    var startTime = new Date().getTime();
    while (new Date().getTime() < startTime + 10000);
    ret_resp();
    var response = {status:'success'};
    function ret_resp(){
        return response;
    }
    console.log("Thank You for waiting......");

Like in console i see output as : stdout====: Waiting for child Process (block.js) to complete...... -punws-sohan 就像在控制台中一样,我看到的输出为:stdout ====:等待子进程(block.js)完成... -punws-sohan

stdout: ==== Thank You for waiting...... 标准输出:====谢谢您的等待……

I cannot see output for return response statement Can anyone suggest how to capture response from child process? 我看不到返回响应语句的输出有人可以建议如何从子进程中捕获响应吗?

First of all, the busy loop uses up unnecessary CPU time. 首先,繁忙循环会占用不必要的CPU时间。 Just use a setTimeout() instead. 只需使用setTimeout() Example: 例:

setTimeout(function() {
  ret_resp();
  // ...
}, 10000);

Secondly, you can't expect return to magically write the returned value to the parent process. 其次,您不能期望return神奇地将返回的值写入父进程。 Try this instead: 尝试以下方法:

// parent.js
var child = cp.fork('./child_process/block.js', [], { silent: true });
child.stdout.on('data', function(data) {
  console.log('stdout: ==== ' + data);
});
child.stderr.on('data', function(data) {
  console.log('stdout: ' + data);
});
child.on('message', function(msg) {
  console.log('message from child: ' + require('util').inspect(msg));
});
child.on('close', function(code) {
  console.log('closing code: ' + code);
});


// child.js
console.log('Waiting for child Process (block.js) to complete......');
setTimeout(function() {
  var response = {status:'success'};
  function ret_resp() {
    process.send(response);
  }
  ret_resp();
  console.log('Thank You for waiting......');
}, 10000);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM