diff --git a/doc/api/cluster.markdown b/doc/api/cluster.markdown index 6a923b45cf8396..b7e76fcb8ffa0e 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 bb4b60a2fc489e..bcde4ce1fa7f54 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 a72d1f079efaaa..427c3058903d5d 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() {