NodeJS Fork - 每次子进程发送换行时都会发生反应

时间:2015-03-19 20:49:28

标签: javascript ajax node.js socket.io

我正在尝试用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页面。 (如果你能帮我指出那个方向,那肯定是奖励积分!)

1 个答案:

答案 0 :(得分:0)

好的,我意识到我需要使用" 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