NodeJS Fork-每次子流程发送新行时都进行React

NodeJS Fork - React each time a newline is sent by subprocess

本文关键字:新行时 React 程发送 Fork- NodeJS      更新时间:2023-09-26

我正试图用NodeJS(如果有区别的话,在Windows7上)编写一个函数,该函数将侦听子进程,并在通过子进程发送每条新行后,在Node中处理它。看看这个例子:

var express = require('express');
var app = express();
app.listen(3000);
app.get('/', function(request, response) {
    var exec = require('child_process').exec,
        child, out = "NA";
    child = exec('java -jar misc.jar',
        function (error, stdout, stderr) {
            if(stdout!==''){
                out = '---------stdout: ---------'n' + stdout;
            }
            if(stderr!==''){
                out = '---------stderr: ---------'n' + stderr;
            }
            if (error !== null) {
                out = '---------exec error: ---------'n[' + error+']';
            }
            response.send(out);
        });
});

可以想象,function (error, stdout, stderr)只有在我的子流程终止后才会被调用。

相反,我希望在stdout或stderr中出现新行文本时调用该函数。在这一点上,我想使用AJAX/Socket.IO来动态更新面向用户的html页面。(如果你也能帮我指明方向,那绝对是加分!)

好吧,我意识到我需要使用"spawn"而不是"exec"来实现这一点:

var express = require('express');
var app = express();
app.listen(3000);
app.get('/', function(request, response) {
    response.send("Hey");
    var spawn = require('child_process').spawn;
    var java = spawn('java', ['-jar', 'misc.jar']);
    java.stdout.on('data', function(data) {
        console.log(data);
    });
});

然而,我注意到用"回应"来表达是不允许我推送数据的。因此,我需要弄清楚我问题的最后一部分,因为我认为要做到这一点,我需要使用AJAX/Socket.IO