2012-08-23 3 views
1

Ceci est ma première application Meteor, je suis vraiment excité d'essayer d'apprendre le framework, alors je viens de construire un site web interne qui va gérer un tas de processus en ligne de commande. La plupart de ces processus de ligne de commande prennent de 10 à 20 minutes à s'exécuter. J'espérais pouvoir envoyer des commentaires à l'utilisateur pendant l'exécution, par exemple en redirigeant la sortie stdout vers l'utilisateur lors de l'exécution du processus. En ce moment je fais ceci:Flux stdout vers le site Web Meteor

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

Cela fonctionne très bien, et lorsque le travail est terminé, je vois le journal, mais je me demandais s'il y avait une meilleure façon que je pouvais faire en sorte que les résultats sont disponibles I peut commencer à les envoyer. Tout conseil est le bienvenu.

Répondre

1

Je voudrais ajouter la sortie ligne par ligne en utilisant l'opérateur MongoDB $push au lieu de réinitialiser le contenu de "logs" à chaque fois. Cela vous permettra d'économiser de la bande passante, je suppose. Mais à part cela, exec n'appelle pas votre fonction régulièrement. Jetez un oeil à la question "node.js execute system command synchronously pour une solution de contournement.

Questions connexes