Come funziona esattamente sotto il cofano / a livello di sistema operativo (principalmente nelle implementazioni Unix / dal punto di vista dell'API socket)?
La documentazione del modulo cluster dice:
"il processo principale ascolta su una porta, accetta nuove connessioni e le distribuisce tra i lavoratori in modo round robin"
Questo significa che il processo master da solo gestisce / chiama accept() sulle connessioni in entrata, quindi passa il descrittore di socket restituito a un processo figlio pre-fork tramite un meccanismo IPC ( socket di dominio Unix?), Dove è presumibilmente registrato con un ( a quel processo) meccanismo di multiplexing (ad es. un'istanza epoll)?
Sto cercando di comprendere meglio il funzionamento interno di Node.js, ma non riesco a trovare molte informazioni definitive a questo livello. Qualsiasi aiuto è molto apprezzato.
Grazie
Risposta accettata:
Vedi child.send()
nel modulo nodejs child_process. In poche parole, lo fai:
child.send('socket', socket);
Dove 'socket'
è un nome di messaggio speciale e si invia un riferimento all'oggetto socket nodejs. Nodejs quindi gestisce le cose sotto le coperte nel modulo child_process per inviare l'effettivo handle del socket del sistema operativo al processo figlio e quindi collegare un nuovo oggetto socket nodejs ad esso dall'altra parte delle cose.
Ed ecco un riferimento a un articolo sull'argomento:Invio di un socket a un processo fork in Node.JS.