Comment cela fonctionne-t-il exactement sous le capot / au niveau du système d'exploitation (principalement dans les implémentations Unix / du point de vue de l'API sockets) ?
La documentation du module de cluster indique :
« le processus maître écoute sur un port, accepte les nouvelles connexions et les distribue entre les nœuds de calcul de manière circulaire »
Cela signifie-t-il que le processus maître seul gère / appelle accept() sur les connexions entrantes, puis transmet le descripteur de socket renvoyé à un processus enfant pré-forké via un mécanisme IPC (sockets de domaine Unix?), Où il est vraisemblablement enregistré auprès d'un local ( à ce processus) mécanisme de multiplexage (par exemple une instance epoll) ?
J'essaie de mieux comprendre le fonctionnement interne de Node.js, mais je ne trouve pas beaucoup d'informations définitives à ce niveau. Toute aide est très appréciée.
Merci
Réponse acceptée :
Voir child.send()
dans le module nodejs child_process. En un mot, vous faites :
child.send('socket', socket);
Où 'socket'
est un nom de message spécial et vous envoyez une référence à l'objet socket nodejs. Nodejs gère ensuite les choses sous les couvertures dans le module child_process pour envoyer le véritable handle de socket du système d'exploitation au processus enfant, puis lui connecter un nouvel objet socket nodejs à l'autre bout des choses.
Et, voici une référence à un article sur le sujet :Envoi d'un socket à un processus forké dans Node.JS.