GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Comment Node.js / Le module Cluster transmet-il les nouvelles connexions du processus maître / parent aux processus enfants?

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);

'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.


Linux
  1. Nouveau processus parent lorsque le processus parent meurt ?

  2. Pourquoi le Pgid des processus enfants n'est-il pas le PID du parent ?

  3. Linux - Comment inspecter les informations de structure de répertoire d'un fichier Unix/linux ?

  4. Comment calculer l'utilisation CPU d'un processus par PID sous Linux à partir de C ?

  5. Comment fonctionne copy_from_user du noyau Linux en interne ?

Comment tuer un processus sous Linux ? Commandes pour terminer

Comment répertorier les processus en cours d'exécution sous Linux

Comment tuer les processus Zombie sous Linux

Comment envoyer des processus en arrière-plan sous Linux

Comment systemd gère-t-il la mort d'un enfant d'un processus géré ?

Comment Linux conserve-t-il le contrôle du processeur sur une machine monocœur ?