0% encontró este documento útil (0 votos)
123 vistas13 páginas

Introducción a Node.js y su Funcionamiento

Node.js es un entorno de programación basado en JavaScript que permite construir aplicaciones de red altamente escalables. Funciona mediante un modelo asíncrono y orientado a eventos que elimina la espera y permite manejar múltiples solicitudes simultáneas de forma eficiente. Node.js usa módulos y paquetes de código abierto para realizar diversas tareas como crear servidores web y manejar bases de datos.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
123 vistas13 páginas

Introducción a Node.js y su Funcionamiento

Node.js es un entorno de programación basado en JavaScript que permite construir aplicaciones de red altamente escalables. Funciona mediante un modelo asíncrono y orientado a eventos que elimina la espera y permite manejar múltiples solicitudes simultáneas de forma eficiente. Node.js usa módulos y paquetes de código abierto para realizar diversas tareas como crear servidores web y manejar bases de datos.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Contenido

I. INTRODUCCIÓN ................................................................................................................... 3
II. MARCO TEÓRICO ................................................................................................................ 4
2.1. Node Js ......................................................................................................................... 4
2.1.1. ¿Qué es [Link]? .................................................................................................. 4
2.1.2. ¿Qué puede hacer [Link]? ................................................................................. 5
2.1.3. ¿Qué es un archivo [Link]? ................................................................................ 5
2.1.4. ¿Por qué [Link]? ................................................................................................. 5
2.2. Funcionamiento de Node Js .......................................................................................... 6
2.3. NPM (Node Package Manager) .................................................................................... 8
2.4. Módulos Node Js ........................................................................................................... 9
2.4.1. Módulos nativos ......................................................................................................... 9
2.4.2. Módulos de archivos................................................................................................ 10
2.5. Módulo HTTP [Link] ................................................................................................. 10
2.6. [Link] como un servidor de archivos ........................................................................ 11
III. CONCLUSIONES ............................................................................................................ 12
IV. Bibliografía ....................................................................................................................... 13
“Node Js”

Tabla de Ilustraciones
Ilustración 1 - Thread Singleton .................................................................................................... 7
Ilustración 2 - Programación asíncrona ........................................................................................ 8
Ilustración 3 - Resultado de ejemplo en programación asíncrona ................................................ 8
Ilustración 4 - Ejemplo módulo HTTP ......................................................................................... 10
Ilustración 5 - Resultado del ejemplo de módulo HTTP .............................................................. 10

pág. 2
“Node Js”

I. INTRODUCCIÓN

[Link] es un entorno de programación basado en el lenguaje de programación


JavaScript, el cual actúa el cual actúa del lado del servidor, este cambia la noción de
cómo se debe trabajar un servidor, fue creado con la meta de permitir al programador
construir aplicación de red altamente escalables, esto quiere decir que el código puede
soportar decenas de miles de conexiones simultaneas, lo cual no lo limita, (como por
ejemplo los servidores web), esto resuelve el problema de los actuales lenguajes de
programación los cuales se veían limitado la a cantidad de memoria RAM disponible para
poder aceptar/iniciar una nueva conexión.

En el transcurso de este informe demostraremos como trabajar con este entorno de


programación, realizando ejemplos básicos de su funcionamiento, además se
explicaremos como se logró, demostrando la utilidad y sencillez de un entorno de
programación llamado [Link].

pág. 3
“Node Js”

II. MARCO TEÓRICO


2.1. Node Js
[Link] es un entorno de programación del lado del servidor basado en el lenguaje de
programación JavaScript, que utiliza un modelo asíncrono, esto quiere decir que las
entradas y salidas no bloquean al programa, usa una programación orientada a eventos
con la particularidad que los eventos en esta plataforma son orientados a cosas que
suceden del lado del servidor y no del lado del cliente como los que conocemos
anteriormente en JavaScript común. Está basado en el motor JavaScript V8 un intérprete
ultra rápido escrito en C++ (con el que funciona el JavaScript de Google Chrome). Fue
creado en 2009 por Ryan Dahl.

La meta primordial del [Link] es proporcionar una manera fácil para la construcción de
programas de red escalables, este objetivo se da en vista de la actual situación que
presentan los lenguajes de programación de hoy en día, donde la cantidad máxima de
conexiones está limitada por la cantidad de memoria RAM que tenga el sistema, [Link]
resuelve esto cambiando la forma en que se realiza la conexión, ya que en vez de hacer
lo anteriormente descrito, dispara la ejecución de un evento dentro del proceso de motor
de [Link].

En teoría Node puede soportar tantas conexiones como sockets tenga el sistema. En un
sistema UNIX este límite puede rondar por las 65.000 conexiones, un número muy alto
teóricamente. Sin embargo, en la realidad, la cifra depende de muchos factores, como la
cantidad de información que la aplicación este distribuyendo a los clientes. A pesar de
esto una aplicación podría mantener 20.000-25.000 clientes a la vez sin haber apenas
retardo en las respuestas. Queremos recalcar que [Link] es un programa de servidor,
este no viene a reemplazar a lo que son Apache o Tomcat que son básicamente
servidores listos para instalar e implementar. (Campusano, Fredes, Cordero, & Badilla,
2014)

2.1.1. ¿Qué es [Link]?


Básicamente el Node JS es una implementación de JavaScript bajo el Runtime V8
(Con el que se Desarrolló Google Chrome) que permite que JavaScript funcione
como lenguaje utilizable del lado del Servidor. De esta forma se puede trabajar del
lado del cliente y del servidor con el mismo conocimiento para el desarrollo de desde
aplicaciones para celulares, Web Services, hasta sockets y real-time apps, entre
otras cosas. (Ezequiel, 2017)

pág. 4
“Node Js”

 [Link] es una infraestructura de servidor de código abierto

 [Link] es gratis

 [Link] se ejecuta en varias plataformas (Windows, Linux, Unix, Mac OS X,


etc.)

 [Link] utiliza JavaScript en el servidor

[Link] puede hacer

 [Link] pueden generar páginas con contenidos dinámicos

 [Link] puede crear, abrir, leer, escribir, borrar y cerrar archivos en el servidor

 [Link] pueden recopilar datos de formularios

 [Link] pueden añadir, borrar, modificar los datos de su base de datos

2.1.2. ¿Qué puede hacer [Link]?

 [Link] pueden generar páginas con contenidos dinámicos

 [Link] puede crear, abrir, leer, escribir, borrar y cerrar archivos en el servidor

 [Link] pueden recopilar datos de formularios

 [Link] pueden añadir, borrar, modificar los datos de su base de datos

2.1.3. ¿Qué es un archivo [Link]?

 [Link] archivos contienen tareas que se ejecutarán en determinados eventos

 Un caso típico es alguien intentando acceder a un puerto en el servidor

 [Link] archivos deben ser iniciadas en el servidor antes de tener ningún efecto

 [Link] archivos tienen extensión ".js"

2.1.4. ¿Por qué [Link]?


¡[Link] utiliza la programación asíncrona!

Una tarea común para un servidor web puede ser abrir un archivo en el servidor y
devolver el contenido al cliente.

Así es como PHP o ASP maneja una petición de archivo:

 Envía la tarea al sistema de archivos del equipo.

 Espera mientras el sistema de archivos se abre y lee el archivo.

 Devuelve el contenido al cliente.

pág. 5
“Node Js”

 Listo para manejar la siguiente solicitud.

Así es como [Link] maneja una petición de archivo:

 Envía la tarea al sistema de archivos del equipo.

 Listo para manejar la siguiente solicitud.

 Cuando el sistema de archivos se ha abierto y leer el archivo, el servidor


devuelve el contenido al cliente.

[Link] elimina la espera, y simplemente continúa con la siguiente petición.

[Link] se ejecuta, sin bloqueo de un solo subproceso, programación asíncrona, que


es muy eficiente de la memoria.

Algunas Características

 Rápido

 Escalable

 Manejo de Eventos

 Asíncrono

 Ligero

 Eficiente

 Funciona en sistemas distribuidos

 Curva de aprendizaje, corta.

 Comunidad Activa

2.2. Funcionamiento de Node Js


Al estar basado en el motor V8, está diseñado para correr en un navegador y ejecutar el
código de JavaScript de una forma extremadamente rápida.

Su Tecnología nos permite ejecutar este motor en el lado del servidor, abriendo un nuevo
abanico de posibilidades en cuanto al mundo de desarrollo se refiere. Para ello su
entorno ha desarrollado un conjunto amplio de librerías comparables a las de otras
plataformas. Y, por otro lado, se han eliminado algunas funcionalidades que en el entorno
de servidor no tenían sentido como por ejemplo el uso de Document Object Model.
Además trabaja con un único hilo de ejecución (Single Thread) que es el encargado de
organizar todo el flujo de trabajo que se deba realizar. (Ezequiel, 2017)

a) Single Thread (Único Hilo)

pág. 6
“Node Js”

La idea principal de [Link]: uso no bloqueante, event driven I/O, permanecer ligero y
eficiente en la superficie del uso intensivo de datos en tiemporeal de las aplicaciones que
se ejecutan en dispositivos distribuidos.

Frente a las tradicionales técnicas de servicio web donde cada conexión (solicitud)
genera un nuevo subproceso, retomando la RAM del sistema y finalmente a tope a la
cantidad de RAM disponible, [Link] opera en un solo subproceso, no utiliza el bloqueo
de llamadas de E/S, esto permite admitir decenas de miles de conexiones simultáneas.
(Ver ilustración 1) (Ezequiel, 2017)

Ilustración 1 - Thread Singleton

b) Programación Asíncrona

Éste es un concepto que toma especial importancia, dado que Node JS fue pensado
desde el primer momento para potenciar los beneficios de la programación asíncrona.

pág. 7
“Node Js”

Imaginemos que un programa tiene un fragmento de código que tarda cinco segundos
en resolverse. En la mayoría de las programaciones precedentes, durante todo ese
tiempo el hilo de ejecución se encuentra ocupado, esperando a que pasen esos cinco
segundos, o los que sea, antes de continuar con las siguientes instrucciones. En la
programación asíncrona eres capaz de liberar el proceso de modo que los recursos se
quedan disponibles para hacer otras cosas durante el tiempo de espera.

Un ejemplo claro de esto es una llamada a un servicio web, o una consulta a la base de
datos. Una vez realizada la solicitud generalmente pasará un tiempo hasta que se
obtenga la respuesta. Ese tiempo, por corto que sea, dejaría un proceso esperando en
la programación tradicional y en la asíncrona simplemente se libera.

En Node JS, o en JavaScript en general, cuando esa espera ha terminado y se ha


recibido la respuesta, se retomará la ejecución del código. Para definir las acciones a
realizar (código a ejecutar) cuando se haya terminado esa espera, se especifica el código
mediante funciones llamadas habitualmente "callbacks". Esas funciones contendrán las
líneas de código que ejecutan al de esos procesos de espera, y una vez se ha recibido
la respuesta. (Ezequiel, 2017)

Ilustración 2 - Programación asíncrona

Ilustración 3 - Resultado de ejemplo en programación asíncrona

2.3. NPM (Node Package Manager)


La herramienta de gestor de paquetes "NPM (package manager)" viene por defecto con
cada instalación de [Link].

El código se organiza por medio de módulos, la idea de los módulos NPM es muy similar
a la de Ruby o java: un conjunto de componentes reutilizables, como los paquetes o

pág. 8
“Node Js”

librerías, disponibles públicamente a través de una fácil instalación a través de un


repositorio en línea, con la versión y la dependencia de gestión.

El módulo es un ecosistema abierto a todos, y cualquiera puede publicar su propio


módulo que será incluido en el repositorio de NPM. (Ezequiel, 2017)

NPM

 ExpressJS (Web para Node, con muchas utilidades como ser, routing, sesión,

 configuraciones de entorno, etc)

 Jade (Motor para páginas web)

 [Link] (Aplicaciones web en tiempo real, con un gran soporte de


exploradores y mobile)

 NowJS (Aplicaciones web en tiempo real de forma muy simple, con llamadas a
funciones js

 (clienteservidor/ servidorcliente)

 EveryAuth (Autenticaciones oAuth hecho simple con soporte a


muchas redes sociales)

 Mongoose (Driver para MongoDB)

2.4. Módulos Node Js


Un módulo en [Link] es simplemente una unidad de código relacionado con un único
fin.

Un módulo puede estar compuesto por 1 o más archivos, [Link] tiene un sistema simple
de carga de módulos, En [Link], los archivos y los módulos tienen una correspondencia
de uno a uno, Un módulo puede depender de uno o más módulos de [Link].

Existen 2 tipos de módulos: los módulos principales (Core modules) y los módulos de
archivo (File modules). (Sánchez, 2015)

2.4.1. Módulos nativos


Los módulos principales(nativos) son definidos en el código fuente de node en la carpeta
lib/ y tienen la preferencia de carga frente a cualquier otro módulo.

Mientras que la mayoría de los módulos son archivos JavaScript sin formato, algunos
módulos son imágenes binarias específicas de plataforma. Estos módulos se compilan
en el momento de la instalación, normalmente mediante Python y node-gyp. Puesto que
Cloud Services de Azure se basan en la carpeta node_modules que se implementa como
parte de la aplicación, los módulos nativos incluidos como parte de los módulos

pág. 9
“Node Js”

instalados deben funcionar en un servicio en la nube siempre que se haya instalado y


compilado en un sistema de desarrollo de Windows.

Azure App Service no es compatible con todos los módulos nativos y podría presentar
errores al compilar módulos con requisitos previos específicos. Aunque algunos módulos
conocidos, como MongoDB, tienen dependencias nativas opcionales y funcionan
correctamente sin ellas, dos soluciones alternativas han demostrado funcionar
correctamente con casi todos los módulos nativos actualmente disponibles. (Sánchez,
2015)

2.4.2. Módulos de archivos


Los módulos de archivo son módulos definidos por el usuario (como el que usaremos en
este artículo) y por lo general se registran en NPM para su uso. (Sánchez, 2015)

2.5. Módulo HTTP [Link]


[Link] tiene un módulo incorporado llamado HTTP, que permite a [Link] transferir
datos a través del Protocolo de transferencia de hipertexto (HTTP).

El módulo HTTP puede crear un servidor HTTP que escucha a los puertos del servidor y
responde al cliente. ([Link], 2017)

Ilustración 4 - Ejemplo módulo HTTP

Ilustración 5 - Resultado del ejemplo de módulo HTTP

pág. 10
“Node Js”

2.6. [Link] como un servidor de archivos


El módulo del sistema de archivos [Link] le permite trabajar con el sistema de archivos
en su computadora. ([Link], 2017)

Para incluir el módulo del sistema de archivos, se usa el require() método:

var fs = require('fs');

Uso común para el módulo del sistema de archivos:

 Leer archivos

o El [Link]()método se utiliza para leer archivos en su computadora.


 Crear archivos

o [Link]() este método agrega contenido específico a un archivo.


Si el archivo no existe, el archivo será creado.
o [Link]() método toma una "bandera" como segundo argumento, si la
bandera es "w" para "escribir", el archivo especificado se abre para
escribir. Si el archivo no existe, se crea un archivo vacío.

o [Link]() este método reemplaza el archivo y el contenido


especificados si existen. Si el archivo no existe, se creará un nuevo
archivo con el contenido especificado.

 Actualizar archivos

o [Link]() este método agrega el contenido especificado al final


del archivo especificado.

o [Link]() este método reemplaza el archivo y contenido


especificados.

 Borrar archivos

o Para eliminar un archivo con el módulo Sistema de archivos, use el


[Link]() método. Este método elimina el archivo especificado
 Renombrar archivos

o Para cambiar el nombre de un archivo con el módulo Sistema de


archivos, utilice el [Link]() método.

o El [Link]()método renombra el archivo especificado:

pág. 11
“Node Js”

III. CONCLUSIONES

pág. 12
“Node Js”

IV. Bibliografía
Campusano, C., Fredes, N., Cordero, F., & Badilla, C. (2014). [Link]: Plataforma de fácil
programación de seervidores para aplicaciones de red escalables. Obtenido de
[Link]
Ezequiel, C. (2017). [Link]. Obtenido de
[Link]
nodejs/[Link]
Sánchez, J. (19 de 02 de 2015). [Link]. Obtenido de [Link]
como-crear-modulos-nodejs-publicar-npmjs
[Link]. (2017). [Link]. Obtenido de
[Link]

pág. 13

Common questions

Con tecnología de IA

Node.js facilita el manejo eficiente de datos en aplicaciones distribuidas mediante su arquitectura basada en eventos, que permite reaccionar rápidamente a entradas y salidas sin bloqueo. Su entorno ligero potencia la gestión de solicitudes concurrentes, ideal para sistemas distribuidos donde el tiempo de respuesta y la eficiencia son críticos. Al permitir la creación de aplicaciones que comparten estado o datos en tiempo real a través de sockets o servicios REST, Node.js soporta arquitecturas de microservicios y sistemas de mensajes que manejan eficientemente grandes volúmenes de datos distribuidos .

Node.js se diferencia de servidores web tradicionales como Apache o Tomcat principalmente en su arquitectura de manejo de conexiones. Mientras que Apache o Tomcat crean un nuevo hilo para cada conexión, lo que puede llevar a un rápido agotamiento de los recursos del sistema cuando el número de conexiones es elevado, Node.js emplea un modelo de 'single-thread' y programación no bloqueante, manejando las conexiones a través de un mecanismo basado en eventos. Esto permite que Node.js maneje un número significativamente mayor de conexiones simultáneas, aprovechando al máximo la capacidad de los sockets subyacentes .

En Node.js, los módulos nativos son componentes esenciales del núcleo de Node.js que proporcionan funcionalidad básica, como el manejo de archivos y la creación de servidores HTTP. Estos módulos son parte integral del código fuente de Node y tienen prioridad de carga. Por otro lado, los módulos de archivos son definidos por los usuarios y pueden ser registrados en NPM para ser reutilizados. Juntos, estos módulos permiten a los desarrolladores extender la funcionalidad de Node.js, crear proyectos más modulares y manejar de manera eficiente las dependencias y las funcionalidades del sistema .

Los módulos HTTP de Node.js están diseñados para gestionar la transferencia de datos mediante el protocolo HTTP, permitiendo la creación de servidores web que pueden escuchar y responder a solicitudes de clientes. Por otro lado, los módulos de sistema de archivos permiten la manipulación directa de archivos en el sistema operativo, ofreciendo funciones para leer, escribir y modificar archivos locales. Ejemplos de uso del módulo HTTP incluyen servidores REST y API, mientras que los módulos de archivos son usados para tareas como el almacenamiento y recuperación de datos en archivos. Ambas categorías permiten el desarrollo de aplicaciones completas y robustas .

La principal ventaja de usar un modelo de programación asíncrona en Node.js es que permite que las operaciones de entrada y salida se procesen sin bloquear el hilo principal de ejecución, lo que permite manejar un gran número de conexiones simultáneas sin comprometer el rendimiento del sistema. Esto es fundamental para aplicaciones que requieren alta escalabilidad y eficiencia en el manejo de datos en tiempo real. Al no esperar a que una operación de E/S se complete, Node.js puede seguir procesando otras solicitudes, lo que maximiza el uso de recursos disponibles .

La comunidad activa de Node.js juega un papel vital en su ecosistema, impulsando la innovación mediante la creación y mejora constante de módulos disponibles en plataformas como NPM. Esta colaboración abierta y el gran número de desarrolladores contribuyendo con nuevas características y correcciones aseguran que Node.js evolucione rápidamente para cubrir necesidades emergentes del desarrollo web moderno. La sinergia de una comunidad activa permite a Node.js mantenerse competitivo y relevante frente a nuevas tecnologías en el desarrollo de servidores y aplicaciones .

Node.js asegura la escalabilidad de las aplicaciones de red mediante su modelo de programación asíncrono y no bloqueante que permite manejar un alto número de solicitudes concurrentes con una mínima sobrecarga de recursos. Sin embargo, enfrenta limitaciones en su capacidad para manejar tareas altamente computacionales en un único hilo, donde delegar tareas pesadas a subprocesos adicionales o clusters puede complicar su arquitectura y gestión de memoria. Además, los límites ofrecen distinto rendimiento dependiendo de factores como el hardware y la carga de red .

NPM juega un papel crucial en la gestión de paquetes y dependencias en proyectos Node.js al proporcionar una plataforma centralizada para la instalación, actualización y mantenimiento de módulos reutilizables que los desarrolladores pueden compartir y utilizar. Se diferencia de otros gestores de paquetes por su vasta biblioteca de módulos disponibles y su comunidad activa, lo que fomenta el rápido desarrollo y colaboración. Comparado con gestores de otros lenguajes, ofrece una de las mayores colecciones de paquetes, y su integración directa con Node.js simplifica el flujo de trabajo de desarrollo .

El uso del motor JavaScript V8 en Node.js es significativo porque este motor, desarrollado por Google y utilizado en Chrome, está diseñado para ejecutar JavaScript a gran velocidad compartiendo las optimizaciones y mejoras en rendimiento del navegador. El V8 compila el código JavaScript en un código máquina altamente optimizado antes de su ejecución, lo que permite a Node.js ejecutar scripts de manera extremadamente eficiente en el servidor. Esta capacidad de V8 ayuda a Node.js a lograr un rendimiento notablemente superior en comparación con interpretaciones menos optimizadas de JavaScript en otros entornos .

El uso de JavaScript tanto del lado del cliente como del servidor al emplear Node.js unifica el desarrollo de aplicaciones bajo un único lenguaje de programación, lo que simplifica significativamente el proceso de desarrollo y mantenimiento. Los desarrolladores pueden compartir código entre el cliente y el servidor, reutilizar paradigmas y herramientas comunes, y facilitar la cooperación entre equipos de desarrollo front-end y back-end. Esto puede conducir a una mayor eficiencia del equipo y reduce la curva de aprendizaje al manejar solo un lenguaje .

También podría gustarte