1

これは私にとって初めての Meteor アプリケーションです。フレームワークを学ぼうとすることにとても興奮しているので、一連のコマンド ライン プロセスを管理する内部 Web サイトを構築しました。これらのコマンド ライン プロセスの多くは、実行に 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();
    })
  }
});

これは正常に機能し、ジョブが完了するとログが表示されますが、結果が利用可能になったときに送信を開始できるようにするためのより良い方法があるかどうか疑問に思っていました. どんなアドバイスでも大歓迎です。

4

1 に答える 1

1

$push毎回「ログ」の内容をリセットするのではなく、MongoDB オペレーターを使用して出力を 1 行ずつ追加します。これにより、帯域幅が節約されると思います。

しかし、それとは別にexec、関数を定期的に呼び出しません。回避策については、「node.js execute system command synchronously」の質問をご覧ください。

于 2012-08-23T17:51:04.897 に答える