这是我的第一个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();
})
}
});
这很好用,当作业完成时我会看到日志,但我想知道是否有更好的方法可以做到这一点,以便结果可用时我可以开始发送它们。任何建议都是受欢迎的。
答案 0 :(得分:1)
我会使用MongoDB $push
运算符逐行追加输出,而不是每次都重置“logs”的内容。这会为你节省一些带宽。
但除此之外,exec
并不会定期调用您的函数。请查看"node.js execute system command synchronously问题以获得解决方法。