cluster: emit 'message' event on cluster master
authorSam Roberts <sam@strongloop.com>
Sun, 15 Feb 2015 02:50:56 +0000 (18:50 -0800)
committerSam Roberts <sam@strongloop.com>
Thu, 23 Jul 2015 21:51:10 +0000 (14:51 -0700)
For consistency with the worker 'exit', 'online', 'disconnect', and
'listening' events which are emitted on worker and cluster, also emit
'message' on cluster.

Reviewed-by: Sam Roberts <vieuxtech@gmail.com>
Reviewed-by: Christian Tellnes <christian@tellnes.no>
Reviewed-by: Stephen Belanger <admin@stephenbelanger.com>
PR-URL: https://github.com/nodejs/io.js/pull/861

doc/api/cluster.markdown
lib/cluster.js
test/parallel/test-cluster-message.js

index 6a923b4..b7e76fc 100644 (file)
@@ -248,6 +248,16 @@ This can be used to restart the worker by calling `.fork()` again.
 
 See [child_process event: 'exit'](child_process.html#child_process_event_exit).
 
+## Event: 'message'
+
+* `worker` {Worker object}
+* `message` {Object}
+
+Emitted when any worker receives a message.
+
+See
+[child_process event: 'message'](child_process.html#child_process_event_message).
+
 ## Event: 'setup'
 
 * `settings` {Object}
@@ -530,6 +540,8 @@ created. It is disconnected after the `disconnect` event is emitted.
 
 * `message` {Object}
 
+Similar to the `cluster.on('message')` event, but specific to this worker.
+
 This event is the same as the one provided by `child_process.fork()`.
 
 In a worker you can also use `process.on('message')`.
index bb4b60a..bcde4ce 100644 (file)
@@ -319,6 +319,8 @@ function masterInit() {
       process: workerProcess
     });
 
+    worker.on('message', this.emit.bind(this, 'message'));
+
     function removeWorker(worker) {
       assert(worker);
 
index a72d1f0..427c305 100644 (file)
@@ -6,7 +6,7 @@ var net = require('net');
 
 function forEach(obj, fn) {
   Object.keys(obj).forEach(function(name, index) {
-    fn(obj[name], name, index);
+    fn(obj[name], name);
   });
 }
 
@@ -45,6 +45,10 @@ if (cluster.isWorker) {
 else if (cluster.isMaster) {
 
   var checks = {
+    global: {
+      'receive': false,
+      'correct': false
+    },
     master: {
       'receive': false,
       'correct': false
@@ -76,12 +80,15 @@ else if (cluster.isMaster) {
   // Spawn worker
   var worker = cluster.fork();
 
-  // When a IPC message is received form the worker
+  // When a IPC message is received from the worker
   worker.on('message', function(message) {
     check('master', message === 'message from worker');
   });
+  cluster.on('message', function(message) {
+    check('global', message === 'message from worker');
+  });
 
-  // When a TCP connection is made with the worker connect to it
+  // When a TCP server is listening in the worker connect to it
   worker.on('listening', function() {
 
     client = net.connect(common.PORT, function() {