流stdout到Meteor网站

时间:2012-08-23 17:24:17

标签: meteor

这是我的第一个Meteor应用程序,我很高兴尝试学习该框架,所以我只是构建了一个内部网站来管理一堆命令行进程。其中许多命令行进程需要10-20分钟才能执行,因此我希望我可以在执行期间向用户提供反馈,例如在执行流程时将stdout传回给用户。现在我正在这样做:

var require __meteor_bootstrap__.require
var sys = require('sys')
var exec = require('child_process').exec;

Meteor.methods({
  foo: function(job_id) {
    var select = { _id: job_id };
    var execCommand = "dir /s"; // or whatever it is I'm doing
    exec(execCommand, function(error, stdout, stderr) {
      Fiber (function() {
        Jobs.update(select, {$set: { logs: stdout }});
      }).run();
    })
  }
});

这很好用,当作业完成时我会看到日志,但我想知道是否有更好的方法可以做到这一点,以便结果可用时我可以开始发送它们。任何建议都是受欢迎的。

1 个答案:

答案 0 :(得分:1)

我会使用MongoDB $push运算符逐行追加输出,而不是每次都重置“logs”的内容。这会为你节省一些带宽。

但除此之外,exec并不会定期调用您的函数。请查看"node.js execute system command synchronously问题以获得解决方法。