falaina

Untitled

Mar 23rd, 2012
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var cluster  = require('cluster');
  2. var fs       = require('fs');
  3. var util     = require('util');
  4. var _ = require('underscore')._;
  5.  
  6. var optimist = require('optimist');
  7. var argv = optimist.argv;
  8. var script;
  9. var name = "";
  10.  
  11. console.log = _.wrap(console.log, function(fn) {
  12.   process.stdout.write(name + " ");
  13.   fn.apply(this, _.rest(arguments));
  14. });
  15.  
  16. function sub() {
  17.   var vm = require('vm');
  18.   name = util.format("[S-%s]", process.pid);
  19.   process.on('message', function(m) {
  20.     eval(m, script);
  21.   });
  22.   process.stdin.end();
  23. }
  24.  
  25. function main() {
  26.   name = util.format("   [M-%s]", process.pid);
  27.   var code = fs.readFileSync(script, 'utf8');
  28.  
  29.   function _forkChild() {
  30.     var child = cluster.fork();
  31.     console.log("Starting [%s] (%s)", script, child.pid);
  32.     child.send(code);
  33.   }
  34.   var forkChild = _.throttle(_forkChild, 1000);
  35.  
  36.   function childDeath(child) {
  37.     console.log("Died     [%s] (%s)", script,  child.pid);
  38.     forkChild();
  39.   }
  40.  
  41.   cluster.on('death', childDeath);
  42.   forkChild();
  43. };
  44.  
  45. if(!module.parent) {
  46.   if(argv._.length != 1) {
  47.     throw new Error("One script must be passed");
  48.   }
  49.   script = argv._[0];
  50.   if(cluster.isMaster) {
  51.     main();
  52.   } else {
  53.     sub();
  54.   }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment