¿Qué es la programación basada en eventos en node.js?
Nodejs es un proceso único y un subproceso único, pero basado en la poderosa fuerza impulsora de V8 y el modelo basado en eventos, el rendimiento de nodejs es muy alto y no es difícil lograr múltiples núcleos. o multiproceso (ya existe una gran cantidad de módulos de terceros para implementar esta función).
El objetivo principal aquí no es presentar el código de aplicación específico de nodejs, sino presentar la programación basada en eventos.
Dan York presentó dos ejemplos típicos impulsados por eventos.
El primer ejemplo es sobre médicos que atienden a pacientes.
Cuando vas a ver a un médico en Estados Unidos, necesitas completar muchos formularios, como seguros, información personal, etc. En el sistema tradicional basado en hilos, la recepcionista te llama y debe completarlo en la recepción. Para completar estos formularios, debe levantarse y completarlos mientras la recepcionista se sienta y observa cómo los completa. Hace que la recepcionista no pueda atender al siguiente cliente a menos que su negocio esté completo.
Si quieres que este sistema funcione más rápido, sólo puedes agregar unas cuantas recepcionistas más, lo que aumentará mucho el costo de mano de obra.
En un sistema basado en eventos, cuando vas a la ventana y descubres que necesitas completar algunos formularios adicionales en lugar de simplemente registrar un número, la recepcionista te dará el formulario y el bolígrafo y te dirá que puedes encontrar un asiento y llenarlo, luego volver con él después de terminarlo. Vuelve, se sienta y completa el formulario mientras la recepcionista pasa al siguiente cliente. No estás bloqueando el servicio de la recepcionista.
El segundo ejemplo es pedir comida en un restaurante de comida rápida.
En la forma basada en hilos, usted va al mostrador, entrega su pedido al cajero o realiza el pedido directamente al cajero y luego espera allí hasta que tenga su pedido listo para usted. El cajero no puede atender a la siguiente persona hasta que usted obtenga su comida y se vaya. Si quieres recibir más clientes, ¡es fácil! ¡Agrega más cajeros!
Por supuesto, sabemos que los restaurantes de comida rápida no funcionan así. En realidad, se basan en un enfoque basado en eventos, lo que hace que los cajeros sean más eficientes. Tan pronto como le das tu pedido al cajero, alguien ya está preparando tu comida mientras el cajero recibe el pago. Cuando terminas de pagar, te haces a un lado mientras el cajero pasa al siguiente cliente. En algunos restaurantes, incluso te darán un número y, si tu comida está lista, te llamarán y te pedirán que la recojas en el mostrador. El punto clave es que no bloquees la solicitud de pedido del próximo cliente. El evento de que la comida que ordenó esté lista hará que alguien realice una determinada acción (un camarero llama a su número de pedido y usted escucha que llaman a su número para obtener la comida). En el mundo de la programación, a esto lo llamamos devolución de llamada (devolución de llamada). función).
Por el contrario, Node.Js utiliza un modelo basado en eventos. Cuando el servidor web recibe una solicitud, la cierra, la procesa y luego atiende la siguiente solicitud web. Cuando se completa la solicitud, se vuelve a colocar en la cola de procesamiento y, cuando se alcanza el principio de la cola, el resultado se devuelve al usuario. Este modelo es muy eficiente y escalable porque el servidor web siempre acepta solicitudes sin esperar operaciones de lectura o escritura. (Esto también se denomina IO sin bloqueo o IO controlada por eventos).
Considere el siguiente proceso:
Utiliza un navegador para acceder a "/about.html" en el servidor nodejs
El servidor nodejs recibe su solicitud y llama Una función lee este archivo desde el disco.
Durante este tiempo, el servidor web nodejs atiende solicitudes web posteriores.
Cuando se lee el archivo, se inserta una función de devolución de llamada en la cola de servicio de nodejs.
Cuando el servidor web nodejs ejecuta esta función, en realidad muestra la página about.html y la devuelve a su navegador.
Parece que solo ahorra unos microsegundos, ¡pero es importante! Especialmente para servidores web que requieren un gran número de usuarios.