Enviando datos de entrada al proceso hijo en node.js

Estoy escribiendo código para crear un comstackdor de c ++ en línea en el entorno de node.js. Utilizando la función spawn , creé un proceso secundario que comstackrá el código, lo ejecutará y enviará la salida al usuario. Pero necesito enviar entradas al progtwig c ++ en ejecución. Utilicé child.stdin.write('data'); para enviar datos a niños pero creo que cin en el progtwig no está recibiendo la entrada.
Por favor, ayúdeme a enviar la entrada al código de c ++ en ejecución.
Gracias.

Probablemente debería usar el clúster o la bifurcación si desea pasar mensajes … si lo hace, el nodo configurará el IPC para que pueda comunicarse a través de process.send


Alternativamente, podría usar un pub / subsistema para canales de comunicación (Redis funciona bien para esto), esta es también su mejor opción si necesita comunicaciones entre servidores.


A continuación se muestra un ejemplo de un script de trabajo más antiguo …

 var env = process.env.NODE_ENV || 'dev'; var cluster = require("cluster"); //TODO: need to adjust to use domains for this work process.on('uncaughtException', function (err) { console.error('GENERAL EXCEPTION IN %s: %s', process.env.WORKER_TYPE || 'MASTER',err); if (err.stack) console.error(err.stack); if (cluster.isWorker) { //process.send notifies the parent process of the error process.send({ err: { "str": err && err.toString() || "unknown error" ,"message": err && err.message || null ,"stack": err && err.stack || null } }); } process.nextTick(function(){ process.exit(666); }); }); if (cluster.isMaster) startMaster(); if (cluster.isWorker) startWorker(); function startMaster() { createWorker("foo"); createWorker("bar"); } function createWorker(workerType) { var worker = cluster.fork({"WORKER_TYPE":workerType}); //passes environment variables to child worker.on('online',onOnline.bind(null, worker)); worker.on('message',onMessage.bind(null, worker)); worker.on('exit',onExit.bind(null, worker)); worker.workerType = workerType; return worker; // you can use worker.send() to send a message that // will raise a message event in the child } function startWorker() { console.log("Running Worker: %s %s", cluster.worker.id, process.env.WORKER_TYPE); setTimeout(process.exit.bind(process,0), 5000); //close in 5 seconds //you may want to load a specific module based on WORKER_TYPE } function onOnline(worker) { console.log("Worker Online: %s %s", worker.id, worker.workerType); //console.log(arguments); } function onMessage(worker, msg) { if (msg.err) { console.warn("Error From", worker.id, worker.workerType, msg.err); } else { console.log("Message From", worker.id, worker.workerType); } //console.log(arguments); } function onExit(worker, code, signal) { console.log("Worker Exited: %s %s %s %s", worker.id, worker.workerType, code, signal); if (env == 'dev') { //for now just exit the whole thing (dev mode) process.nextTick(function(){ process.exit(1); }); } else { //workers should simply keep working... //fire off a new worker createWorker(worker.workerType); } } 

1.Crear un archivo con datos de entrada.
2.Crear un archivo de entrada de apertura ReadStream .
3.Pipe el ReadStream con ReadStream .

 file=fs.createReadStream('input.txt',{encoding:'utf8'}); file.pipe(childprocess.stdin); 

Esto funcionó para mí.