1

这是我的第一个 Meteor 应用程序,我很高兴尝试学习该框架,所以我刚刚建立了一个内部网站,将管理一堆命令行进程。其中许多命令行进程需要 10 到 20 分钟才能执行,所以我希望我可以在执行过程中向用户提供反馈,例如在进程执行时将标准输出通过管道传回给用户。现在我正在这样做:

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();
    })
  }
});

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

4

1 回答 1

1

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

但除此之外,exec不会定期调用您的函数。查看“node.js 同步执行系统命令”问题以获取解决方法。

于 2012-08-23T17:51:04.897 回答