Está en la página 1de 4

Node.

js es un entorno en tiempo de ejecuci�n multiplataforma, de c�digo abierto,


para la capa del servidor (pero no limit�ndose a ello) basado en el lenguaje de
programaci�n ECMAScript, as�ncrono, con I/O de datos en una arquitectura orientada
a eventos y basado en el motor V8 de Google. Fue creado con el enfoque de ser �til
en la creaci�n de programas de red altamente escalables, como por ejemplo,
servidores web.3? Fue creado por Ryan Dahl en 2009 y su evoluci�n est� apadrinada
por la empresa Joyent, que adem�s tiene contratado a Dahl en plantilla.4?5?

Node.js es similar en su prop�sito a Twisted o Tornado de Python, Perl Object


Environment de Perl, libevent o libev de C, EventMachine de Ruby, vibe.d de D y
Java EE de Java existe Apache MINA, Netty, Akka, Vert.x, Grizzly o Xsocket. Al
contrario que la mayor�a del c�digo JavaScript, no se ejecuta en un navegador, sino
en el servidor. Node.js implementa algunas especificaciones de CommonJS.6? Node.js
incluye un entorno REPL para depuraci�n interactiva.

�ndice
1 Ejemplos
2 Aspectos t�cnicos
2.1 Concurrencia
2.2 V8
2.3 M�dulos
2.4 Desarrollo homog�neo entre cliente y servidor
2.5 Bucle de eventos
3 Releases
4 Comunidad
5 V�ase tambi�n
6 Referencias
7 Enlaces externos
Ejemplos
Versi�n de un hola mundo de un servidor HTTP escrito en Node.js:

const http = require('http');

const hostname = '127.0.0.1';


const port = 1337;

http.createServer((req, res) => {


res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
}).listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
Otro ejemplo con un servidor TCP que escucha en el puerto 7000 y responde con
cualquier cosa que se le env�e:

var net = require('net');

net.createServer(function (stream) {
stream.write('hello\r\n');

stream.on('end', function () {
stream.end('goodbye\r\n');
});

stream.pipe(stream);
}).listen(7000);

Otro ejemplo, pero ahora con discord.js. Este es el c�digo b�sico para hacer
funcionar un bot

//Definimos el npm
const Discord = require("discord.js");

//Creamos el client
const client = new Discord.Client();

//Evento de encendido
client.on("ready", () => {
console.log("Estoy listo!");
});

//Evento de mensaje
client.on("message", (message) => {

var prefix = "!";

if(!message.content.startsWith(prefix)) return;
if(message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();

if(command === "ping"){

message.channel.send("Pong!")

});
client.login("Token");
Aspectos t�cnicos
Concurrencia
Node.js funciona con un modelo de evaluaci�n de un �nico hilo de ejecuci�n, usando
entradas y salidas as�ncronas las cuales pueden ejecutarse concurrentemente en un
n�mero de hasta cientos de miles sin incurrir en costos asociados al cambio de
contexto.7? Este dise�o de compartir un �nico hilo de ejecuci�n entre todas las
solicitudes atiende a necesidades de aplicaciones altamente concurrentes, en el que
toda operaci�n que realice entradas y salidas debe tener una funci�n callback. Un
inconveniente de este enfoque de �nico hilo de ejecuci�n es que Node.js requiere de
m�dulos adicionales como cluster8? para escalar la aplicaci�n con el n�mero de
n�cleos de procesamiento de la m�quina en la que se ejecuta.

V8
V8 es el entorno de ejecuci�n para JavaScript creado para Google Chrome. Es
software libre desde 2008, est� escrito en C++ y compila el c�digo fuente
JavaScript en c�digo de m�quina en lugar de interpretarlo en tiempo real.

Node.js contiene libuv para manejar eventos as�ncronos. Libuv es una capa de
abstracci�n de funcionalidades de redes y sistemas de archivo en sistemas Windows y
sistemas basados en POSIX como Linux, Mac OS X y Unix.

El cuerpo de operaciones de base de Node.js est� escrito en JavaScript con m�todos


de soporte escritos en C++.

M�dulos
Node.js incorpora varios "m�dulos b�sicos" compilados en el propio binario, como
por ejemplo el m�dulo de red, que proporciona una capa para programaci�n de red
as�ncrona y otros m�dulos fundamentales, como por ejemplo Path, FileSystem, Buffer,
Timers y el de prop�sito m�s general Stream. Es posible utilizar m�dulos
desarrollados por terceros, ya sea como archivos ".node" precompilados, o como
archivos en javascript plano. Los m�dulos Javascript se implementan siguiendo la
especificaci�n CommonJS para m�dulos,9? utilizando una variable de exportaci�n para
dar a estos scripts acceso a funciones y variables implementadas por los
m�dulos.10?

Los m�dulos de terceros pueden extender node.js o a�adir un nivel de abstracci�n,


implementando varias utilidades middleware para utilizar en aplicaciones web, como
por ejemplo los frameworks connect y express. Pese a que los m�dulos pueden
instalarse como archivos simples, normalmente se instalan utilizando el Node
Package Manager (npm) que nos facilitar� la compilaci�n, instalaci�n y
actualizaci�n de m�dulos as� como la gesti�n de las dependencias. Adem�s, los
m�dulos que no se instalen en el directorio por defecto de m�dulos de Node
necesitar�n la utilizaci�n de una ruta relativa para poder encontrarlos. El wiki
Node.js proporciona una lista de varios de los m�dulos de terceros disponibles.

Desarrollo homog�neo entre cliente y servidor


Node.js puede ser combinado con una base de datos documental (por ejemplo, MongoDB
o CouchDB) y JSON lo que permite desarrollar en un entorno de desarrollo JavaScript
unificado. Con la adaptaci�n de los patrones para desarrollo del lado del servidor
tales como MVC y sus variantes MVP, MVVM, etc. Node.js facilita la reutilizaci�n de
c�digo del mismo modelo de interfaz entre el lado del cliente y el lado del
servidor.

Bucle de eventos
Node.js se registra con el sistema operativo y cada vez que un cliente establece
una conexi�n se ejecuta un callback. Dentro del entorno de ejecuci�n de Node.js,
cada conexi�n recibe una peque�a asignaci�n de espacio de memoria din�mico, sin
tener que crear un hilo de ejecuci�n.11? A diferencia de otros servidores dirigidos
por eventos, el bucle de gesti�n de eventos de Node.js no es llamado expl�citamente
sino que se activa al final de cada ejecuci�n de una funci�n callback. El bucle de
gesti�n de eventos se termina cuando ya no quedan eventos por atender.

Releases
Las nuevas releases major de Node.js se sacan de la rama master de GitHub cada seis
meses. Las versiones pares se sacan en abril, y las impares en octubre. Cuando se
libera una versi�n impar, la versi�n par anterior pasa a soporte a largo plazo
(Long Term Support, LTS), que da a la versi�n un soporte activo de 18 meses desde
la fecha de inicio de la LTS. Despu�s de estos 18 meses, la versi�n recibe otros 12
meses de soporte de mantenimiento. Una versi�n activa recibir� los cambios
compatibles unas pocas semanas despu�s de que aterricen en la versi�n estable
actual. Una versi�n de mantenimiendo recibir� s�lo actualizaciones cr�ticas y de
documentaci�n.12?

La estrategia y pol�tica de las versiones LTS se gestiona por el LTS Working Group
en colaboraci�n con el Technical Steering Committee de Node.js Foundation.

Release Nombre Fecha release Estado LTS Inicio LTS Inicio


mantenimiento Fin mantenimiento
v0.10.x 2013-03-11 Sin soporte - 2015-10-01 2016-10-31
v0.12.x 2015-02-06 Sin soporte - 2016-04-01 2016-12-31
4.x Argon12? 2015-09-08 Sin soporte 2015-10-01 2017-04-01 2018-04-30
5.x 2015-10-29 No LTS N/D 2016-06-30
6.x Boron12? 2016-04-26 Sin soporte 2016-10-18 2018-04-30 Abril de 2019
7.x 2016-10-25 No LTS N/D 2017-06-30
8.x Carbon12? 2017-05-30 Mantenimiento 2017-10-31 2019-01-0113?
Diciembre de 2019
9.x 2017-10-01 No LTS N/D 2018-06-30
10.x Dubnium12? 2018-04-24 Activo Octubre de 2018 Abril de 2020 Abril
de 2021
11.x 2018-10-23 No LTS N/D Junio de 2019
12.x Erbium12? 2019-04-23 Pendiente Octubre de 2019 Abril de 2021 Abril
de 2022
Comunidad
Existe una comunidad muy activa de desarrolladores de Node.js que se comunican a
trav�s de grupos de discusi�n, nodejs y nodejs-dev y el canal IRC #node.js en
freenode. La comunidad se re�ne en NodeConf, una convenci�n de desarrolladores
centrada en Node.js.14?

V�ase tambi�n
JavaScript
V8
NPM, el gestor de paquetes para Node.js.
Entorno de desarrollo MEAN
Meteor (framework web)
Referencias
Joyent. �node�. Github. Consultado el 16 de junio de 2015.
�Node.js 12 ChangeLog�. Consultado el 30 de agosto de 2019 � via GitHub.
Finley, Klint (25 de enero de 2011). �Wait, What's Node.js Good for Again?�.
ReadWriteWeb (en ingl�s). Archivado desde el original el 21 de junio de 2013.
Consultado el 16 de junio de 2015.
http://mashable.com/2011/03/10/node-js/
Alex Handy (24 de junio de 2011). �Node.js pushes JavaScript to the server-side�.
SDTimes. Consultado el 24 de junio de 2011.

https://web.archive.org/web/20110724011601/http://wiki.commonjs.org/wiki/Implementa
tions/node.js
http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/
cluster
�CommonJS Implementations�. Archivado desde el original el 23 de marzo de 2010.
Consultado el 15 de mayo de 2011.
Ryswyck, Jan. �Taking Baby Steps with Node.js � CommonJS and Creating Custom
Modules�. Consultado el 15 de mayo de 2011.
About Node.js, Node.js Website
�nodejs/Release�. GitHub (en ingl�s). Consultado el 15 de noviembre de 2017.
�node 8 reschedule�. Github. Consultado el 22 de enero de 2019.
�Copia archivada�. Archivado desde el original el 17 de septiembre de 2012.
Consultado el 2 de agosto de 2014.
Enlaces externos
Sitio oficial (ingl�s)
Repositorio de c�digo fuente (ingl�s)
Lista de correo Nodejs - Grupo de discusi�n sobre Node.js (ingl�s)
Lista de correo Nodejs-dev - Grupo de discusi�n sobre fallos y cambios en Node.js
(ingl�s)
NPMJS. El gestor de paquetes de Node.js (ingl�s)
How To Node, tutorial de Node.js (ingl�s)
Como desarrollar tu propia extensi�n nativa para Node.js (ingl�s)
NodeNica, comunidad nicarag�ense de Node.js (espa�ol)
Concurrencia y paralelismo, por Marisa Gil (espa�ol)