cluster: simplify process event handling
authorAndreas Madsen <amwebdk@gmail.com>
Wed, 1 Feb 2012 16:16:15 +0000 (17:16 +0100)
committerisaacs <i@izs.me>
Mon, 6 Feb 2012 22:54:11 +0000 (14:54 -0800)
This simplify the internalMessage and exit event handling
And simply relay message and error event to the worker object
Note that the error event was not relayed before

lib/cluster.js

index ce593ad..f08b15d 100644 (file)
@@ -169,7 +169,7 @@ function handleResponse(outMessage, outHandle, inMessage, inHandle, worker) {
 
 // Handle messages from both master and workers
 var messageHandingObject = {};
-function handleMessage(inMessage, inHandle, worker) {
+function handleMessage(worker, inMessage, inHandle) {
 
   //Remove internal prefix
   var message = extendObject({}, inMessage);
@@ -303,27 +303,13 @@ function Worker(customEnv) {
     });
   }
 
-  // Internal message: handle message
-  this.process.on('internalMessage', function(message, handle) {
-    debug('recived: ', message);
+  // handle internalMessage and exit event
+  this.process.on('internalMessage', handleMessage.bind(null, this));
+  this.process.on('exit', prepareDeath.bind(null, this, 'dead', 'death'));
 
-    // relay to handleMessage
-    handleMessage(message, handle, self);
-    return;
-  });
-
-  // Non-internal message: relay to Worker object
-  this.process.on('message', function(message, handle) {
-    self.emit('message', message, handle);
-  });
-
-  // Handle exit
-  self.process.on('exit', function() {
-    debug('worker id=' + self.uniqueID + ' died');
-
-    // Prepare worker to die and emit events
-    prepareDeath(self, 'dead', 'death');
-  });
+  // relay message and error
+  this.process.on('message', this.emit.bind(this, 'message'));
+  this.process.on('error', this.emit.bind(this, 'error'));
 
 }
 util.inherits(Worker, EventEmitter);