Prendete questo breve esempio: ho un file chiamato parent.js
, con il seguente codice:Node.js - child_process e cluster di confusione
var child_process = require('child_process')
var forker = child_process.fork(__dirname + '/child.js')
forker.on('message', function (msg) {
console.log('PARENT got message:', msg)
})
// sends a message to the forked process?
forker.send({msg: 'Parent message.'})
Prima domanda: mi appare questo diritto? child_process.fork()
restituisce il processo forker, non è vero? (? Come child_process.spawn()
)
Comunque, ecco il codice per child.js
:
process.on('message', function (msg) {
console.log('CHILD got message:', msg)
})
// sends a message to the forker process? why?
process.send({msg: 'Message from the child.'})
Seconda domanda: ciò che process
fare riferimento all'interno del processo figlio? All'attuale processo biforcuto credo? Se sì, quando chiamo process.send()
sto inviando un messaggio al processo genitore giusto?
Terza domanda: prendere questo esempio (versione semplificata da Node: Up and Running):
var cluster = require('cluster')
if (cluster.isMaster) {
// fork child...
var worker = cluster.fork()
worker.on('message', function (msg) {
// do stuff
})
} else if (cluster.isWorker) {
process.send(aMessage)
}
Quello che trovo poco chiaro è: worker
è una specie di forker
dell'esempio precedente? E process.send()
all'interno del lavoratore invia un messaggio al processo forker?
Ok, quindi quando imposto 'process.on ('message')' all'interno di un worker ascolto dai messaggi inviati dal processo master, mentre quando mi piace 'cluster.fork(). On ('message') 'all'interno del processo principale cosa succede in particolare? Chi ascolta i messaggi da chi nel secondo caso? – whatyouhide
il processo figlio, perché 'cluster.fork()' restituisce un processo figlio. – danielepolencic
In realtà giocando con questo codice, finisce che facendo 'cluster.fork(). On ('message')', è il processo master che ascolta i messaggi inviati dal processo appena forato (con 'process.send () '). Per ascoltare i messaggi * dal master *, il master dovrebbe fare 'cluster.fork(). Send()' mentre il worker dovrebbe fare 'process.on ('message')' (o 'cluster.worker.on ('messaggio') '). – whatyouhide