¿Cuál debo elegir para io.js y node.js?
Para explicar qué es Node.js, este artículo lo explicará. Proporcione información general breve: el problema que Node.js intenta resolver, cómo funciona, cómo ejecutar una aplicación simple y las situaciones en las que Node es una buena solución. Este artículo no cubre cómo escribir aplicaciones Node complejas. . y no es un tutorial completo de Node. Leer este artículo debería ayudarle a decidir si desea continuar aprendiendo Node para poder usarlo en su negocio. ¿Qué problemas pretende resolver?
El objetivo declarado de Node es "proporcionar una forma sencilla de crear programas de red escalables". ¿Qué hay de malo en los programas de servidor actuales? Como Java y PHP, cada conexión genera un nuevo hilo, y cada nuevo hilo puede requerir 2 MB de memoria de soporte. En un sistema con 8 GB de memoria, el número máximo teórico de conexiones simultáneas es de 4000 usuarios. Si desea que la aplicación de red admita más usuarios, debe agregar servidores. Por supuesto, esto aumentará los costos, como los costos del servidor, los costos de tráfico y los costos laborales. Además de estos aumentos de costos, también existe un aumento potencial. El problema técnico es que el usuario puede utilizar un servidor diferente para cada solicitud, por lo que cualquier recurso disfrutado debe disfrutarse en todos los servidores. Por las razones anteriores, toda la arquitectura de la aplicación web (incluido el tráfico, la velocidad del procesador y la velocidad de la memoria) es un cuello de botella. : el número máximo de conexiones simultáneas que el servidor puede manejar
Node resuelve este problema cambiando la forma en que se realizan las conexiones al servidor
Resuelve este problema cambiando la forma en que se realizan las conexiones. realizado en el servidor, en lugar de generar un nuevo hilo del sistema operativo para cada conexión (y asignarle algo de memoria), cada conexión desencadena un evento que se ejecuta en el proceso del motor de Node.
Node afirma que no puede. punto muerto porque no permite bloqueos en absoluto y no bloquea llamadas de E/S en absoluto.
Ahora que tienes uno para manejar programas con decenas de miles de conexiones simultáneas, entonces, ¿con qué puedes construir exactamente? ¿Node? ¡Sería "terrible" si tu aplicación web tuviera que manejar tantas conexiones! Eso no es un problema en absoluto". Antes de responder las preguntas anteriores, primero comprendamos cómo funciona Node y cómo está diseñado para ejecutarse.
Volver al inicio
¿Qué no es definitivamente Node?
Sí, Node es un programa de servidor. Sin embargo, el producto Node subyacente ciertamente no es como Apache o Tomcat. Básicamente, se trata de productos de servidor "listos para instalar" que permiten la implementación instantánea de aplicaciones. Apache permite a los desarrolladores crear páginas web dinámicas agregando módulos PHP, los módulos SSL se utilizan para conexiones seguras y Node también tiene el concepto de módulos, lo que permite agregar módulos en el núcleo de Node. De hecho, hay cientos de módulos disponibles para Node y la comunidad es muy activa en la creación, publicación y actualización de módulos, y se procesan docenas de módulos cada día. La parte completa del módulo de Node se analizará más adelante en este artículo.
Volver al inicio
¿Cómo funciona Node?
El propio nodo ejecuta JavaScript V8.
JavaScript del lado del servidor puede ser un concepto nuevo para los programadores que solo usan JavaScript en el lado del cliente, pero el concepto en sí no está tan lejos, ¿por qué no usar el mismo lenguaje de programación en el servidor que en el lado del cliente?
¿Qué es V8? El motor JavaScript V8 es el motor JavaScript subyacente utilizado por Google en su navegador Chrome. Pocas personas piensan en lo que realmente hace JavaScript en el lado del cliente. En realidad, el motor JavaScript se encarga de interpretar y ejecutar el código. Google creó un intérprete súper rápido escrito en C usando V8, que también tiene una característica única: puedes descargar el motor e incrustarlo en cualquier aplicación. Entonces, Node tomó el motor JavaScript V8 escrito por Google y lo reconstruyó para ejecutarlo en el servidor. ¡Es perfecto! ¿Por qué crear un nuevo lenguaje cuando ya existe una buena solución?
Programación basada en eventos
Muchos programadores han sido adoctrinados en la idea de que la programación orientada a objetos es el diseño de programación perfecto, lo que los hace desdeñar otros métodos de programación.
Lista 1. Uso de jQuery en el cliente para programación basada en eventos
//El código jQuery en el cliente muestra cómo funciona la programación basada en eventos
/ /Cuando se presiona el botón, ocurre un evento: manéjelo directamente en la función anónima aquí
//Aquí, todas las
//las variables necesarias ya están presentes y pueden ser referenciado directamente
$("#myButton").click(function(){
if ($("#myTextField").val() != $( this). val())
alert("El campo debe coincidir con el texto del botón");
});
De hecho, el servidor y el cliente No hay diferencia . Sí, no hay clics en botones ni campos de entrada de texto, pero en un nivel superior, los eventos están sucediendo. ¡Establecer una conexión es un evento! ¡Recibir datos a través de una conexión también es un evento! Detenga los datos a través de la conexión, ¡esto sigue siendo un evento!
Por qué este tipo de configuración es perfecta para Node JavaScript es un excelente lenguaje de programación basado en eventos porque permite el uso de funciones y cierres anónimos y, lo que es más importante, es familiar para cualquiera que haya escrito código. sintaxis. La función de devolución de llamada que se llama cuando ocurre un evento se puede escribir cuando se captura el evento. Esto hace que el código sea fácil de escribir y mantener, sin marcos complejos orientados a objetos, sin interfaces y sin posibilidad de sobreingeniería. ¡Simplemente escuche el evento, escriba la función de devolución de llamada y deje todo lo demás en manos del sistema!
Volver al inicio
Ejemplo de aplicación de nodo
Finalmente, ¡veamos algo de código! Juntemos todo lo que hemos discutido y creemos nuestra primera aplicación Node. Ya sabemos que Node es ideal para manejar aplicaciones de alto tráfico, por lo que crearemos una aplicación web muy simple que se ejecutará lo más rápido posible. Con respecto a nuestra aplicación de muestra, el "jefe" dice esto: Cree una API RESTful para un generador de números aleatorios que acepte solo una entrada: un parámetro llamado "número". Luego, la aplicación devuelve un número aleatorio entre 0 y este parámetro y devuelve el número resultante a la persona que llama. Dado que el "propietario" quiere que la aplicación sea popular, debería poder manejar 50.000 usuarios simultáneos. Echemos un vistazo al siguiente código:
Lista 2.Generador de números aleatorios de nodos
// Estos módulos deben importarse para su uso.
Son como #include
// o importar declaraciones en otros idiomas
var http = require("http");
var url = require( " url");
// La línea más importante en cualquier archivo Node. Esta función
//Realiza el proceso real de creación del servidor. Técnicamente,
// Node le dice al sistema operativo subyacente que se utilizará para crear el servidor cada vez que se cree un
// servidor. Al crear un servicio web utilizando la API REST,
// necesitamos un servidor HTTP, que requiere la variable http que creamos en las líneas anteriores
/. Finalmente, puede ver que el método de devolución de llamada recibe automáticamente los objetos "solicitud"
// y "respuesta". Esto debería resultarle familiar a cualquier programador de PHP o Java
//. createServer(function(solicitud, respuesta) {
// La respuesta debe manejar todos los encabezados y códigos de retorno
// Este tipo de cosas se manejan automáticamente en el programa del servidor p >
// Como Apache y Tomcat, pero Node requiere que todo lo haga él mismo
Response.writeHead(200, {"Content-Type": "text/plain"});
p>// Hay un código de apariencia única. Node es un programa de servidor
// Maneja todas estas funciones
// Deconstruye todas estas. funciones.p> // Deconstruye la URL y coloca el valor de la clave de consulta en
// Objeto de consulta var params = url.parse(request.url, true. ).query. p> var entrada = params.numInput = nuevo Número(entrada);
var numSalida = nuevo Número(Math.random() * numInput);
var numSalida = nuevo Número( Math.random() * numInput).random() * numInput).toFixed(0);
// Escribe un número aleatorio en la respuesta
respuesta.write(numOutput). .write(numOutput);
// Node requiere que finalicemos explícitamente esta conexión. Esto se debe a que
// Node le permite mantener conexiones abiertas y pasar datos de un lado a otro,
// aunque este tema avanzado no se trata en este artículo.
respuesta.end();
// Cuando creamos un servidor, tenemos la capacidad de usarlo como servidor. Al crear el servidor, debemos conectar explícitamente el servidor HTTP a
// un puerto. El puerto HTTP estándar es 80, por lo que lo conectaremos a ese puerto. El puerto HTTP estándar es 80, por lo que lo conectaremos a ese puerto. El puerto HTTP estándar es 80, por lo que lo conectaremos a ese puerto.
console.log("Generador de números aleatorios ejecutándose...") ;
Inicie la aplicación
Coloque el código anterior en un archivo llamado "random.js". Ahora, simplemente ingrese el siguiente comando en el símbolo del sistema para que la aplicación esté en funcionamiento (para crear un servidor HTTP y escuchar conexiones en el puerto 80): node random.js. Así es como se ve el servidor cuando está en funcionamiento:
root@ubuntu:/home/moila/ws/ mike# node random.js
Generador de números aleatorios ejecutándose... p>
Accediendo a la aplicación
La aplicación está en funcionamiento, el nodo está escuchando todas las conexiones, probémoslo. Dado que creamos una API RESTful simple, puede acceder a la aplicación mediante un navegador web. Escriba la siguiente dirección (asegúrese de haber completado los pasos anteriores): http://localhost/?number=27.
La ventana de su navegador cambiará a un número aleatorio entre 0 y 27. Haga clic en el botón "recargar" en su navegador y obtendrá otro número aleatorio. ¡Esta es tu primera aplicación de Node!
Volver al inicio
¿Para qué se utiliza Node?
En este punto, es posible que hayas podido responder a la pregunta "¿Qué es Node?", pero aún te quedan dudas: "¿Para qué se utiliza Node? Esta pregunta es importante porque debe haber algo que se puede extraer de Node. Benefit.
¿Para qué se utiliza?
Como viste antes, Node es ideal para situaciones en las que esperas mucho tráfico antes de responder al mensaje. cliente, pero los ejemplos típicos requeridos de lógica y procesamiento del lado del servidor en los que Node destaca incluyen:
API RESTful
Un servicio web que proporciona una API RESTful requiere varios parámetros, que son luego los analiza y los combina en un servicio web. Esto es ideal para Node porque puede construirlo para manejar decenas de miles de conexiones y esencialmente aún no requiere mucha lógica, solo busca desde la base de datos; . y combinarlos en una respuesta Dado que la respuesta es una pequeña cantidad de texto y la solicitud entrante es una pequeña cantidad de texto, el tráfico no es lo suficientemente alto como para que ni siquiera las empresas más ocupadas tengan una sola máquina para satisfacer sus necesidades. Necesidades de API. p>
Cola de Twitter
Imagínese una empresa como Twitter que necesita recibir tweets y escribirlos en una base de datos con miles de tweets que llegan casi cada segundo, la base de datos es imposible. Se requiere una cantidad de escrituras durante los períodos pico, y Node es una parte importante para resolver este problema. Como puede ver, Node puede manejar decenas de miles de tweets entrantes y escribirlos rápida y fácilmente en un mecanismo de cola en memoria (como. memcached), y luego otro proceso lo escribe en la base de datos. Imagine un diseño alternativo (donde un servidor PHP normal intentaría manejar las escrituras en la base de datos): ya que la llamada a la base de datos bloquearía el canal. Al escribir en la base de datos, debido a la latencia de la base de datos, es posible que una máquina con este diseño solo pueda manejar 2000 tweets entrantes por segundo en comparación con los 500 servidores necesarios. Con esto, Node puede manejar cada conexión sin bloquear el canal, capturando así tantos tweets como sea posible. como sea posible Una máquina Node capaz de manejar 50.000 tweets sólo requiere 20 servidores.
Estadísticas de videojuegos
Si has jugado al juego online Call of Duty, cuando mires las estadísticas del juego, inmediatamente te darás cuenta de un problema: generar esto en este nivel de estadísticas, hay que rastrear mucha información. Entonces, si hay millones de jugadores jugando en línea al mismo tiempo y están en diferentes posiciones en el juego, se puede generar una gran cantidad de información muy rápidamente. Node es la mejor solución en esta situación porque captura los datos producidos por el juego, realiza una combinación mínima de los datos y luego los pone en cola para que puedan escribirse en la base de datos. Usar un servidor completo para registrar cuántas balas dispara un jugador en un juego puede parecer una tontería, y si estás usando un servidor como Apache, puede haber algunas limitaciones útiles, sin embargo, si usas un servidor dedicado para registrar todas las estadísticas; los datos de su juego, tal como lo haría con un servidor que ejecuta Node, lo que parece una decisión inteligente.
Volver al inicio
Módulo de nodo
Aunque este no era el tema original planeado de este artículo, debido a las solicitudes de los usuarios populares, el contenido de este artículo ha se ha ampliado para incluir Node Una introducción a los módulos y al administrador de paquetes de Node. Al igual que los desarrolladores acostumbrados a trabajar con Apache, también puedes ampliar la funcionalidad de Node instalando módulos. Sin embargo, los módulos disponibles de Node mejoran enormemente la funcionalidad del producto y estos módulos son tan útiles que los desarrolladores que utilizan Node a menudo instalan varios módulos. Como resultado, los módulos son cada vez más importantes e incluso se han convertido en una parte clave de todo el producto.
En la sección "Referencias", proporcioné un enlace a la página de módulos, que enumera todos los módulos disponibles. Para mostrar las posibilidades que pueden ofrecer los módulos, he incluido los siguientes módulos entre las docenas disponibles: uno para escribir páginas creadas dinámicamente (por ejemplo, PHP), uno para simplificar el uso de MySQL, uno para ayudar con WebSockets y otro para ayudar con análisis de texto y argumentos. No entraré en detalles sobre estos módulos, ya que el propósito de este artículo de descripción general es ayudarlo a comprender Node y determinar si necesita profundizar (nuevamente) y, si lo hace, definitivamente existe la posibilidad de que pueda usar uno. de estos módulos disponibles.
Otra característica de Node es el módulo de paquete Node, una característica incorporada para instalar y administrar módulos de Node. Maneja las dependencias automáticamente, por lo que puede asegurarse de que cualquier módulo que desee instalar se instale correctamente y contenga las dependencias necesarias. También admite la publicación de sus propios módulos en la comunidad de Node si elige unirse a la comunidad de Node y escribir sus propios módulos. Puede pensar en NPM como una forma de ampliar fácilmente la funcionalidad de Node sin tener que preocuparse por interrumpir la instalación de Node. Del mismo modo, si elige sumergirse en Node, NPM se convertirá en una parte importante de su solución Node.
Volver al inicio
Conclusión
Después de leer este artículo, la pregunta que hiciste al principio "¿Qué es exactamente Node.js?" han sido respondidas Y debería poder responder esta pregunta en unas pocas oraciones claras y concisas. Si es así, entonces ya estás por delante de muchos programadores. Muchas personas con las que he hablado sobre Node están confundidas acerca de para qué se utiliza realmente Node. Es comprensible que tengan la mentalidad Apache y crean que el servidor es una aplicación que se puede ejecutar colocando un archivo HTML en él. Dado que la mayoría de los programadores están familiarizados con Apache y sus usos, la forma más sencilla de describir Node es compararlo con Apache, donde todo lo que un programa puede hacer (con la ayuda de algunos módulos) se puede hacer, mientras que Node sirve como un JavaScript extensible. plataforma en la que puedes construir y aún más.
Node es un programa que puede hacer todo lo que Apache puede hacer (con la ayuda de algunos módulos) y mucho más como una plataforma JavaScript extensible que se puede construir sobre ella.
Como puedes ver en este artículo, Node logra su objetivo de proporcionar un servidor altamente escalable. Utiliza V8, un rápido motor JavaScript de Google. Utiliza un diseño basado en eventos para mantener el código mínimo y legible. Todos estos factores contribuyen al objetivo ideal de Node de escribir soluciones altamente escalables con relativa facilidad.
Al comprender qué es Node, es igualmente importante comprender qué no es. Node no es sólo un reemplazo de Apache, sino que también está diseñado para hacer que las aplicaciones web PHP sean más escalables. Nada podría estar más lejos de la verdad. Aunque Node todavía está en su infancia, está creciendo rápidamente, la participación de la comunidad es muy alta, los miembros de la comunidad están creando toneladas de módulos excelentes y, dentro de un año, podría tener este producto en evolución en su organización.