Erro: canal fechado ao enviar uma mensagem de filho para pai

Estou tentando passar uma mensagem de uma criança para meu pai com um token.

Eu preciso fazer q solicitação para um dispositivo para obter informações gps e cada criança tem um token beacause em Node.js cada processo tem sua própria variável global e não posso compartilhar o mesmo onde eu tenho um token.

Então, para ter um var global, minha solução foi passar o token preenchido para o pai e, em seguida, no pai filtrar a mensagem e preencher o var global com o token recebido.

nsGPSService.js

require('./globals'); var listRoutDirectories = getDirectories(routeDirectory); for (var i = 0; i < listRoutDirectories.length; i++) { var directoryName = listRoutDirectories[i]; var directoryPath = routeDirectory + '/' + listRoutDirectories[i]; var directoryFiles = getFiles(directoryPath); for (var j = 0; j  -1) { global.Controllers[file.replace('Controller.js', '')] = require(directoryPath + '/' + file); } else if (file.indexOf('Model.js') > -1) { global.Models[file.replace('Model.js', '')] = require(directoryPath + '/' + file); } else if (file.indexOf('Database.js') > -1) { global.Database[file.replace('Database.js', '')] = require(directoryPath + '/' + file); } } } var child_process = require("child_process"); var argv = require('minimist')(process.argv.slice(2)); //ex: nsGPSService.js -d 1111-11-11-111 var deviceId = argv.d; var processDevices = []; function runParent () { setTimeout(function() { var numDevice = 1; createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'runParent', ""); return Database.Devices.getDevices().then(function (devices) { return new Promise(function (resolve, reject) { async.each(devices, function (device, callback) { var result = _.filter(processDevices, {"id": device.id}); if(result.length == 0) { logger.info('WSController-Service', 'runParent', 'getRadioInfo --> ', device.id, ' :: ', numDevice++, '/', devices.length); var process = child_process.fork(__dirname + '/nsGPSService.js', ["-d", device.id]); processDevices.push({ "process": process, "id": device.id }); process.on('message', function(data) { console.log("message received in parent with data ",data); //receber mensagens do filho if(data.reason == "deleted") { //child acabou o processo e informa o parent para remover da lista var index = _.findIndex(processDevices, {"id": data.deviceId}); processDevices.splice(index, 1); } if(data.action == "storeToken"){ radioAccess = data.radioAccess; } }); process.on('exit', function(code) { createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'runParent', 'Exiting with code', code); }); process.on("uncaughtException", function (error) { createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'runParent', 'error', error); process.exit(1); }); } callback(); }, function(error) { // createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'runParent', 'error', error); error ? reject(error) : resolve(); }); }).then(function() { runParent() }).catch(function(error) { createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'runParent', 'catch error', error); runParent() }); }); },5000); } if(!deviceId) { createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), deviceId, 'runParent'); runParent(); } function runChild (id) { createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), id, 'runChild', ""); setTimeout(function() { return Database.Devices.getDeviceById(id).then(function(device) { if(!device) { process.exit(); return; } process.send({"action": "storeToken", "radioAccess": radioAccess[deviceId]}); return Controllers.Gps.getRadioInfo('gps', 'info', {}, device).then(function (data) { createLog('debug', __dirname, __filename.slice(__dirname.length + 1, - 3), id, 'runChild', 'data', data); return Controllers.Gps.sendDeviceInfo(data, device); }).then(function() { return runChild(id); }).catch(function (e) { createLog('error', __dirname, __filename.slice(__dirname.length + 1, - 3), id, 'runChild callback error', e); return runChild(id); }); }); }, 5000); } runChild(deviceId); 

globals.js

global.radioAccess = {};

Onde meu token é armazenado no radioAccess global com este conteúdo:

 {"token":"fc7908e4a39c4a81e8c1e144c6f0fe65","timeout":300,"expire":1512567077360} 

Cada criança estava fazendo uma solicitação e cada processo tem uma session diferente para o mesmo dispositivo, minha solução é compartilhar a mesma session até que ela expire e comunicar esse valor para o pai porque nele o valor do radioAccess se {}