Node Js
Node Js
Node Js
js
Ir a la navegaciónIr a la búsqueda
Node.js
Logo Node.js
Información general
Tipo de programa Dirigida por eventos
Autor Ryan Lienhart Dahl
Desarrollador Node.js Developers
Joyent
Lanzamiento inicial 27 de mayo de 20091
Licencia Licencia MIT
Estado actual Activo
Información técnica
Programado en C++, JavaScript
Versiones
Última versión estable 12.14.0
Última versión en pruebas 13.5.0
Historial de versiones lista versiones
Asistencia técnica
Enlaces
Sitio web oficial
Repositorio de código
[editar datos en Wikidata]
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 JavaScript, asíncrono, con E/S 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.4 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.56
Í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 Versiones
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:
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) => {
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();
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.8 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 cluster9 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.
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,10 utilizando una variable de exportación para
dar a estos scripts acceso a funciones y variables implementadas por los módulos.11
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.12 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.
Versiones
Las nuevas versiones principales de Node.js se sacan de la rama máster 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á solamente actualizaciones críticas y
de documentación.13
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.
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 22 de diciembre de 2019 – via GitHub.
«Node.js 13 ChangeLog». Consultado el 22 de diciembre 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». Archivado desde el original el 28 de junio de 2011. 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)
Curso de NodeJS (español)