GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿cómo pasa Node.js/el módulo de clúster nuevas conexiones desde el proceso principal/principal a los procesos secundarios?

¿Cómo funciona exactamente bajo el capó/a nivel del sistema operativo (principalmente en implementaciones de Unix/desde la perspectiva de la API de sockets)?

La documentación del módulo de clúster dice:

"el proceso maestro escucha en un puerto, acepta nuevas conexiones y las distribuye entre los trabajadores de forma rotatoria"

¿Significa esto que el proceso maestro solo maneja / llama a accept() en las conexiones entrantes, y luego pasa el descriptor de socket devuelto a un proceso secundario previamente bifurcado a través de algún mecanismo IPC (¿sockets de dominio Unix?), donde presumiblemente está registrado con un local ( a ese proceso) mecanismo de multiplexación (por ejemplo, una instancia de epoll)?

Estoy tratando de comprender mejor el funcionamiento interno de Node.js, pero no puedo encontrar mucha información definitiva en este nivel. Cualquier ayuda es muy apreciada.

Gracias

Respuesta aceptada:

Ver child.send() en el módulo child_process de nodejs. En pocas palabras, usted hace:

child.send('socket', socket);

Donde 'socket' es un nombre de mensaje especial y envía una referencia al objeto de socket nodejs. Luego, Nodejs maneja las cosas debajo de las cubiertas en el módulo child_process para enviar el identificador de socket del sistema operativo real al proceso secundario y luego conectar un nuevo objeto de socket de nodejs en el otro extremo de las cosas.

Y aquí hay una referencia a un artículo sobre el tema:Envío de un socket a un proceso bifurcado en Node.JS.


Linux
  1. ¿Por qué el Pgid de los procesos secundarios no es el Pid del padre?

  2. Linux:¿cómo decide The Oom Killer qué proceso eliminar primero?

  3. Linux:¿cómo se inspecciona la información de la estructura del directorio de un archivo Unix/linux?

  4. Cómo obtener un proceso secundario del proceso principal

  5. ¿Cómo envío un mensaje a mi socket.io websocket desde la línea de comando en Linux?

¿Cómo matar un proceso en Linux? Comandos para Terminar

Cómo enumerar los procesos en ejecución en Linux

Cómo matar procesos Zombie en Linux

¿Nuevo proceso principal cuando muere el proceso principal?

Cómo enviar procesos a segundo plano en Linux

¿Cómo retiene Linux el control de la CPU en una máquina de un solo núcleo?