From 66fc8ca22b05036f88cf457873332e67f5b576b2 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Sat, 14 Feb 2015 18:50:56 -0800 Subject: [PATCH] cluster: emit 'message' event on cluster master 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 Reviewed-by: Christian Tellnes Reviewed-by: Stephen Belanger PR-URL: https://github.com/nodejs/io.js/pull/861 --- doc/api/cluster.markdown | 12 ++++++++++++ lib/cluster.js | 2 ++ test/parallel/test-cluster-message.js | 13 ++++++++++--- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/doc/api/cluster.markdown b/doc/api/cluster.markdown index 6a923b4..b7e76fc 100644 --- a/doc/api/cluster.markdown +++ b/doc/api/cluster.markdown @@ -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')`. diff --git a/lib/cluster.js b/lib/cluster.js index bb4b60a..bcde4ce 100644 --- a/lib/cluster.js +++ b/lib/cluster.js @@ -319,6 +319,8 @@ function masterInit() { process: workerProcess }); + worker.on('message', this.emit.bind(this, 'message')); + function removeWorker(worker) { assert(worker); diff --git a/test/parallel/test-cluster-message.js b/test/parallel/test-cluster-message.js index a72d1f0..427c305 100644 --- a/test/parallel/test-cluster-message.js +++ b/test/parallel/test-cluster-message.js @@ -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() { -- 2.7.4