GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Wie übergibt Node.js / das Clustermodul neue Verbindungen vom Master- / Elternprozess an untergeordnete Prozesse?

Wie genau funktioniert das unter der Haube / auf Betriebssystemebene (hauptsächlich in Unix-Implementierungen / aus der Perspektive der Sockets-API)?

Die Clustermodul-Dokumentation sagt:

„Der Master-Prozess lauscht an einem Port, akzeptiert neue Verbindungen und verteilt sie im Round-Robin-Verfahren an die Worker“

Bedeutet dies, dass der Master-Prozess allein Accept() bei eingehenden Verbindungen verarbeitet / aufruft und dann den zurückgegebenen Socket-Deskriptor über einen IPC-Mechanismus (Unix-Domain-Sockets?) An einen vorverzweigten untergeordneten Prozess übergibt, wo er vermutlich bei einem lokalen ( zu diesem Prozess) Multiplexing-Mechanismus (z. B. eine epoll-Instanz)?

Ich versuche, das Innenleben von Node.js besser zu verstehen, kann aber auf dieser Ebene nicht viele definitive Informationen finden. Jede Hilfe wird sehr geschätzt.

Danke

Akzeptierte Antwort:

Siehe child.send() im Modul nodejs child_process. Kurz gesagt, Sie tun:

child.send('socket', socket);

Wo 'socket' ist ein spezieller Nachrichtenname und Sie senden eine Referenz auf das nodejs-Socket-Objekt. Nodejs behandelt dann die Dinge unter der Decke im child_process-Modul, um das eigentliche OS-Socket-Handle an den untergeordneten Prozess zu senden und dann am anderen Ende ein neues nodejs-Socket-Objekt damit zu verbinden.

Und hier ist ein Verweis auf einen Artikel zum Thema:Sending a socket to a forked process in Node.JS.


Linux
  1. Warum ist die PGID der untergeordneten Prozesse nicht die PGID des übergeordneten Prozesses?

  2. Wie berechnet man die CPU-Auslastung eines Prozesses und aller seiner untergeordneten Prozesse in Linux?

  3. Wie sende ich über die Befehlszeile in Linux eine Nachricht an meinen socket.io-Websocket?

  4. Wie erhalte ich die übergeordnete PID eines bestimmten Prozesses in GNU/Linux von der Befehlszeile aus?

  5. Wie behält Linux die Kontrolle über die CPU auf einem Single-Core-Rechner?

Wie beendet man einen Prozess in Linux? Befehle zum Beenden

So listen Sie laufende Prozesse in Linux auf

So beenden Sie Zombie-Prozesse in Linux

So senden Sie Prozesse unter Linux an den Hintergrund

Wie unterscheidet Linux Threads von untergeordneten Prozessen?

Wie erzwinge ich Linux, eine neue IP-Adresse vom DHCP-Server erneut zu beziehen?