Ejemplos de dónde debe usarse Node.js
CHARLA:
- ¿Sería útil la Ley de TI para un desarrollador web?
- ¿Hay alguna manera de hacer un contador web solo con JavaScript del lado del cliente?
- ¿Los marcos web e idiomas tradicionales como RubyOnRail, Spring Boot y PHP están muriendo ahora cuando nuevos marcos y servicios de JavaScript puro y reactivo como Meteor, Node, Angular 2.0 y Firebase están abriendo camino?
- ¿Debe un diseñador de IU web poder codificar HTML / CSS?
- Cómo aumentar el rendimiento del proyecto Django con grandes datos
El chat es la aplicación multiusuario en tiempo real más típica. Desde IRC (en el pasado), a través de muchos protocolos abiertos y patentados que se ejecutan en puertos no estándar, hasta la capacidad de implementar todo hoy en Node.js con websockets que se ejecutan sobre el puerto estándar 80.
La aplicación de chat es realmente el ejemplo ideal para Node.js: es una aplicación liviana, de alto tráfico, con uso intensivo de datos (pero bajo procesamiento / computación) que se ejecuta en dispositivos distribuidos. También es un gran caso de uso para el aprendizaje, ya que es simple, pero cubre la mayoría de los paradigmas que usará en una aplicación típica de Node.js.
Tratemos de representar cómo funciona.
En el ejemplo más simple, tenemos una única sala de chat en nuestro sitio web donde las personas vienen y pueden intercambiar mensajes de una a muchas (en realidad, todas). Por ejemplo, supongamos que tenemos tres personas en el sitio web todas conectadas a nuestro tablero de mensajes.
En el lado del servidor, tenemos una aplicación Express.js simple que implementa dos cosas: 1) un controlador de solicitud GET ‘/’ que sirve a la página web que contiene un tablero de mensajes y un botón ‘Enviar’ para inicializar la entrada de mensajes nuevos, y 2) un servidor websockets que escucha los nuevos mensajes emitidos por los clientes websocket.
En el lado del cliente, tenemos una página HTML con un par de controladores configurados, uno para el evento de clic en el botón ‘Enviar’, que recoge el mensaje de entrada y lo envía al websocket, y otro que escucha los nuevos mensajes entrantes. en el cliente websockets (es decir, mensajes enviados por otros usuarios, que el servidor ahora quiere que el cliente muestre).
Cuando uno de los clientes publica un mensaje, esto es lo que sucede:
- El navegador captura el botón ‘Enviar’ al hacer clic en un controlador de JavaScript, recoge el valor del campo de entrada (es decir, el texto del mensaje) y emite un mensaje websocket utilizando el cliente websocket conectado a nuestro servidor (inicializado en la inicialización de la página web).
- El componente del lado del servidor de la conexión websocket recibe el mensaje y lo reenvía a todos los demás clientes conectados mediante el método de difusión.
- Todos los clientes reciben el nuevo mensaje como un mensaje push a través de un componente websockets del lado del cliente que se ejecuta dentro de la página web. Luego recogen el contenido del mensaje y actualizan la página web en el lugar agregando el nuevo mensaje a la pizarra.
API EN LA PARTE SUPERIOR DE UNA OBJETO DB:
Aunque Node.js realmente brilla con aplicaciones en tiempo real, es bastante natural para exponer los datos de las bases de datos de objetos (por ejemplo, MongoDB). Los datos almacenados JSON permiten que Node.js funcione sin el desajuste de impedancia y la conversión de datos.
Por ejemplo, si usa Rails, convertiría de JSON a modelos binarios, luego los expondría nuevamente como JSON a través de HTTP cuando Backbone.js, Angular.js, etc., o incluso jQuery AJAX los consuman. llamadas. Con Node.js, simplemente puede exponer sus objetos JSON con una API REST para que el cliente la consuma. Además, no necesita preocuparse por la conversión entre JSON y cualquier otra cosa al leer o escribir desde su base de datos (si está usando MongoDB). En resumen, puede evitar la necesidad de conversiones múltiples utilizando un formato de serialización de datos uniforme en el cliente, el servidor y la base de datos.
ENTRADAS EN COLA:
Si recibe una gran cantidad de datos concurrentes, su base de datos puede convertirse en un cuello de botella. Como se muestra arriba, Node.js puede manejar fácilmente las conexiones concurrentes. Pero debido a que el acceso a la base de datos es una operación de bloqueo (en este caso), nos encontramos con problemas. La solución es reconocer el comportamiento del cliente antes de que los datos se escriban realmente en la base de datos.
Con ese enfoque, el sistema mantiene su capacidad de respuesta bajo una carga pesada, lo cual es particularmente útil cuando el cliente no necesita una confirmación firme de una escritura de datos exitosa. Los ejemplos típicos incluyen: el registro o la escritura de datos de seguimiento de usuarios, procesados en lotes y no utilizados hasta un momento posterior; así como las operaciones que no necesitan reflejarse instantáneamente (como actualizar un recuento de ‘Me gusta’ en Facebook) donde la consistencia eventual (tan utilizada en el mundo NoSQL) es aceptable.
Los datos se ponen en cola a través de algún tipo de infraestructura de almacenamiento en caché o en cola de mensajes (por ejemplo, RabbitMQ, ZeroMQ) y se digieren mediante un proceso de escritura por lotes de base de datos independiente o servicios de procesamiento intensivo de cómputo, escritos en una plataforma de mejor rendimiento para tales tareas. Se puede implementar un comportamiento similar con otros lenguajes / marcos, pero no en el mismo hardware, con el mismo alto rendimiento mantenido.
En resumen: con Node, puede empujar las escrituras de la base de datos a un lado y tratarlas más tarde, procediendo como si hubieran tenido éxito.
Transmisión de datos:
En las plataformas web más tradicionales, las solicitudes y respuestas HTTP se tratan como eventos aislados; de hecho, en realidad son transmisiones. Esta observación se puede utilizar en Node.js para construir algunas funciones interesantes. Por ejemplo, es posible procesar archivos mientras todavía se están cargando, ya que los datos ingresan a través de una secuencia y podemos procesarlos en línea. Esto podría hacerse para la codificación de audio o video en tiempo real, y la representación entre diferentes fuentes de datos.
APODERADO:
Node.js se emplea fácilmente como un proxy del lado del servidor donde puede manejar una gran cantidad de conexiones simultáneas sin bloqueo. Es especialmente útil para enviar diferentes servicios con diferentes tiempos de respuesta o para recopilar datos de múltiples puntos de origen.
Un ejemplo: considere una aplicación del lado del servidor que se comunica con recursos de terceros, extrae datos de diferentes fuentes o almacena activos como imágenes y videos en servicios en la nube de terceros.
Aunque existen servidores proxy dedicados, usar Node en su lugar podría ser útil si su infraestructura de proxy no existe o si necesita una solución para el desarrollo local. Con esto, quiero decir que podría crear una aplicación del lado del cliente con un servidor de desarrollo Node.js para activos y solicitudes API de proxy / stubbing, mientras que en producción manejaría tales interacciones con un servicio proxy dedicado (nginx, HAProxy, etc. .).
¡¡Gracias!!