Académique Documents
Professionnel Documents
Culture Documents
Node.js
Node.js
Desarrollador
Node.js Developers
Joyent
nodejs.org
Informacin general
Diseador
Lanzamiento
27 de mayo de 20091
inicial
ltima versin
0.12.2
estable
31 de marzo de 2015
ltima versin
0.11.15
en pruebas
20 de enero de 2015
Gnero
Sistema
Windows, Mac OS
operativo
Licencia
Licencia MIT
Estado actual
Activo
1Ejemplos
2Aspectos tcnicos
o
2.1Paralelismo
2.2V8
2.3Mdulos
2.5Lazo de eventos
3Comunidad
4Vase tambin
5Referencias
6Enlaces externos
Ejemplos[editar]
Versin de un hola mundo de un Servidor HTTP escrito en Node.js:
Otro ejemplo con un servidor TCP que escucha en el puerto 7000 y responde con
cualquier cosa que se le enve:
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);
Aspectos tcnicos[editar]
Paralelismo[editar]
Node.js funciona con un modelo de evaluacin de un nico hilo de ejecucin, usando
entradas y salidas asncronas las cuales pueden ejecutarse concurrentemente en un
nmero de hasta cientos de miles sin incurrir en costos asociados al cambio de
contexto.6 Este diseo de compartir un nico hilo de ejecucin entre todas las solicitudes
atiende a necesidades de aplicaciones altamente concurrentes, en el que toda operacin
que realice entradas y salidas debe tener una funcin callback. Un inconveniente de este
enfoque de nico hilo de ejecucin es que Node.js requiere de mdulos adicionales
como cluster7 para escalar la aplicacin con el nmero de ncleos de procesamiento de la
mquina en la que se ejecuta.
V8[editar]
V8 es el ambiente de ejecucin para JavaScript creado para Google Chrome. Es software
libre desde 2008, est escrito en C++ y compila el cdigo fuente JavaScript en cdigo de
mquina en lugar de interpretarlo en tiempo real.
Node.js contiene libuv para manejar eventos asncronos. Libuv es una capa de abstraccin
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 mtodos de
soporte escritos en C++. hv g vgu hg
Mdulos[editar]
Node.js incorpora varios "mdulos bsicos" compilados en el propio binario, como por
ejemplo el mdulo de red, que proporciona una capa para programacin de red asncrona
y otros mdulos fundamentales, como por ejemplo Path, FileSystem, Buffer, Timers y el de
propsito ms general Stream. Es posible utilizar mdulos desarrollados por terceros, ya
sea como archivos ".node" precompilados, o como archivos en javascript plano. Los
mdulos Javascript se implementan siguiendo la especificacin CommonJS para
mdulos,8 utilizando una variable de exportacin para dar a estos scripts acceso a
funciones y variables implementadas por los mdulos.9
Los mdulos de terceros pueden extender node.js o aadir un nivel de abstraccin,
implementando varias utilidades middleware para utilizar en aplicaciones web, como por
ejemplo los frameworks connect y express. Pese a que los mdulos pueden instalarse
como archivos simples, normalmente se instalan utilizando el Node Package Manager
(npm) que nos facilitar la compilacin, instalacin y actualizacin de mdulos as como la
gestin de las dependencias. Adems, los mdulos que no se instalen el directorio por
defecto de mdulos de Node necesitarn la utilizacin de una ruta relativa para poder
encontrarlos. El wiki Node.js proporciona una lista de varios de los mdulos de terceros
disponibles.
Lazo de eventos[editar]
Node.js se registra con el sistema operativo y cada vez que un cliente establece una
conexin se ejecuta un callback. Dentro del ambiente de ejecucin de Node.js, cada
conexin recibe una pequea asignacin de espacio de memoria dinmico, sin tener que
generar un hilo de trabajo.10 A diferencia de otros servidores dirigidos por eventos, el lazo
de manejo de eventos de Node.js no es llamado explcitamente sino que se activa al final
de cada ejecucin de una funcin de callback. El lazo de manejo de eventos se termina
cuando ya no quedan eventos por atender.
Comunidad[editar]
Existe una comunidad muy activa de desarrolladores de Node.js que se comunican a
travs de grupos de discusin, nodejs y nodejs-dev y el canal IRC #node.js enfreenode. La
comunidad se rene en NodeConf, una convencin de desarrolladores centrada en
Node.js.11
Qu es AngularJS
28 de agosto de 2014
8 Comentarios
Primeramente tenemos que hablar sobre el gran patrn que se usa en Angular,
el conocido Modelo, Vista, Controlador.
Adems del patrn principal, descrito hasta ahora tenemos los mdulos:
Mdulos: La manera que nos va a proponer AngularJS para que nosotros como
Parte del HTML: Es la parte declarativa, con las vistas, as como las directivas y
filtros que nos provee AngularJS, as como los que hagamos nosotros mismos o terceros
desarrolladores.
Es importante sealar aqu, aunque se volver a incidir sobre ese punto, que
nunca jams se deber acceder al DOM desde la parte del Javascript. Es un
pecado mortal ya que esa parte debe ser programada de manera agnstica, sin
tener en cuenta la manera en la que se van a presentar los datos.
As que, qu es AngularJS?.
AngularJS es un framework JavaScript de desarrollo de aplicaciones web en el
lado cliente, viene de la mano de los chicos de Google y se podra decir que
utiliza el patrn MVC (Model-View-Controller), aunque ellos mismos lo definen
ms bien como un MVW (Model-View-Whatever (whatever works for you)).
Puedes
leer
ms
sobre
esto
en esta
publicacin
de
Google+.
Los creadores de este framework estn convencidos de que HTML no est an
preparado para servir vistas dinmicas de un modo eficiente, as que han
decidido extender la sintaxis de HTML para darle ms funcionalidad.
Vale, espera, extender la sintaxis de HTML?. Bien, esto puede resultar algo
confuso al principio as que os voy a dejar un ejemplo para que entendis a que
me
refiero.
En el ejemplo anterior podis encontrar elementos nuevos como ng-app, ngmodel y el nombre de una variable rodeada de dobles corchetes. Las dos
primeras son lo que en AngularJS llaman directives y la tercera es el modo de
mostrar el valor de una variable del $scope (algo as como el contexto de la
aplicacin)
en
pantalla,
como
si
de
un
template
se
tratara.
Entonces, qu nos permite AngularJS?. Vamos a ver varios ejemplos donde
intentar explicar de pasada los puntos notables del framework. No obstante,
me gustara aclarar un par de conceptos que vais a ver continuamente en los
ejemplos, los scopes y los controllers.
Scopes
Los scopes son los distintos contextos de ejecucin sobre los que trabajan las
expresiones de AngularJS, por ejemplo, cuando referenciamos un atributo del
modelo mediante la directive ng-model, no estamos sino apuntando a un
atributo que contiene el scope sobre el que se est trabajando. En
los scopes se guarda la informacin de los modelos que se representan en la
vista y tambin atributos que se utilizan para manejar la lgica de la misma.
principalmente
desde
los controllers y
desde
Controllers
Los controllers son los encargados de inicializar y modificar la informacin que
contienen losscopes en funcin de las necesidades de la aplicacin.
Tambin podemos declarar funciones en el scope que se podrn utilizar ms
tarde o ser llamadas desde la vista.
Una vez explicado esto, vamos a dar un paseo por las caractersticas de
AngularJS.
Qu ofrece AngularJS?
Client-side template
El sistema de plantillas en AngularJS es diferente del utilizado en otros
frameworks. Por lo general es el servidor el encargado de mezclar la plantilla
con los datos y devolver el resultado al navegador. En AngularJS el servidor
proporciona los contenidos estticos (plantillas) y la informacin que se va a
representar (modelo) y es el cliente el encargado de mezclar la informacin del
modelo
con
la
plantilla
para
generar
la
vista.
En el siguiente ejemplo se puede observar como representamos en AngularJS
una lista de contactos utilizando el motor de plantillas y la directive ng-repeat,
la cual nos permite iterar sobre el array para despus mostrar uno a uno la
informacin de cada elemento contenido en l.
Data binding
Con AngularJS podemos sincronizar el modelo y la vista automticamente
utilizando ciertasdirectives (ng-model en el ejemplo) del framework. Esta
sincronizacin es bidireccional, es decir, la informacin se sincroniza tanto si
cambia el valor en la vista como si lo hace el valor en el modelo.
Directives
Las directives son el plato fuerte de AngularJS. Mediante el uso de las mismas
podemos extender la sintaxis de HTML y darle el comportamiento que
deseemos. Podemos crear directives a nivel de elemento, de atributo, de clase
y
de
comentario.
Un
ejemplo
sera
el
siguiente,
mediante
nuestradirective focusable (una directive a nivel de atributo) podemos
modificar el comportamiento de los elementos input. En este caso cada vez que
el input obtiene o pierde el foco cambia su color de fondo.
Filters
Los filters nos permiten modificar el modo en el que se va a presentar la
informacin
al
usuario.
La utilizacin de los mismos es similar a los Pipeline de Unix:
{{ expresion | filtro }}
Donde expresion puede ser cualquier tipo de expresin de AngularJS, como una
variable del $scope, y filtro el nombre del filtro que le queremos aplicar a la
expresin.
Services
Los services son los encargados de comunicarse con el servidor para enviar y
obtener informacin que despus ser tratada por los controllers para
mostrarla
en
las
vistas.
Esta parte es ms compleja de explicar con un ejemplo, por el momento nos
basta
con
saber
que
losservices se
pueden
dividir
en
tres
categoras: services, factories y providers.
Uno de los services incluidos en el framework es $resource, el cual nos permite
encapsular la interaccin con servicios RESTful sin tener que tratar
directamente
con
las
llamadas
http.
Otros services interesantes
que
incluye
AngularJS
son $q y
las
llamadas promises. Mediante este mecanismo podemos realizar acciones
asncronas y devolver valores que puede que an no hayan sido resueltos.
Cuando la accin ha finalizado el valor devuelto, llamado promise, se resuelve
en funcin del resultado de la misma, mientras tanto la ejecucin del programa
sigue su curso.
Introduccin
El lado del servidor realmente no es tan diferente del lado del cliente. Es
verdad, no se estn presionando botones, y no se est ingresando texto en
campos, pero a un nivel superior, estn sucediendo eventos. Se realiza una
conexin evento! Se reciben datos a travs de la conexin evento! Se
dejan de recibir datos por la conexin evento!
Por qu este tipo de configuracin es ideal para Node? JavaScript es un gran
lenguaje para programacin orientada por eventos, porque permite funciones y
cierres annimos, y ms importante, la sintaxis es similar para casi cualquier
persona que haya codificado. las funciones de devolucin de llamado que se
llaman cuando ocurre un evento pueden escribirse en el mismo punto en el que
usted captura el evento. Fcil de codificar, fcil de mantener. No hay
infraestructuras complicadas Orientadas a Objeto, no hay interfaces, no hay
potencial para sobre-arquitectura de nada. Simplemente esperar por un evento,
escribir una funcin de devolucin de llamado, y se ha resuelto todo!
Volver arriba
Aplicacin Node de ejemplo
Finalmente vamos a ver algo de cdigo! Reunamos todas las cosas sobre las
que hemos tratado y creemos nuestra primera aplicacin Node. Como hemos
visto que Node es ideal para el manejo de aplicaciones de alto trfico, creemos
una aplicacin Web bastante simple, construida para mxima velocidad. Estas
son las especificaciones para nuestra aplicacin de muestra pasadas por el
"jefe": Cree una API RESTful generadora de nmeros aleatorios. La aplicacin
debe recibir una entrada, un parmetro llamado "number". La aplicacin
retornar un nmero aleatorio que est entre 0 y este parmetro, y retornar
ese nmero generado a quien hizo el llamado. Y, como el "jefe" espera que
esta sea una aplicacin masivamente popular, deber manejar 50.000 usuarios
concurrentes. Observemos el cdigo:
Listado 2. Generador Node de nmeros aleatorios
// these modules need to be imported in order to use them.
// Node has several modules. They are like any #include
Accediendo a la aplicacin
Entonces, despus de leer todo sobre Node, usted tal vez pueda responder la
pregunta "Simplemente qu es Node?" pero usted puede quedar con la duda
sobre "En qu puedo utilizar Node?" Esa es una pregunta importante ya que
hay algunas cosas para las que Node es realmente bueno.
Para qu sirve
Como ha visto hasta ahora, Node est extremadamente bien diseado para
situaciones en que usted est esperando una gran cantidad de trfico y donde
la lgica del lado del servidor y el procesamiento requeridos, no sean
necesariamente grandes antes de responder al cliente. Aqu hay algunos
buenos ejemplos en donde Node hara un gran trabajo:
Fila de Twitter
Piense en una compaa como Twitter que recibe tweets y los
escribe en una base de datos. Literalmente hay miles de tweets
llegando cada segundo y la base de datos posiblemente no puede
seguir el ritmo del nmero de escrituras necesarias durante los
horarios pico de uso. Node se convierte en una pieza clave de la
solucin a este problema. Como hemos visto, Node puede manejar
decenas de miles de tweets entrantes. Luego puede escribirlos
rpida/fcilmente en un mecanismo de cola en memoria
(memcached, por ejemplo), desde donde otro proceso separado
puede escribirlos en la base de datos. El rol de Node en esto es
reunir rpidamente el tweet y pasar esta informacin hacia otro
proceso responsable de escribirlo. Imagine otro diseo un
servidor PHP normal que intente manejar escrituras en la base de
datos misma cada tweet podra causar una pequea demora
mientras se escribe en la base de datos, dado que el llamado de
base de datos estara bloqueando. Una mquina con este diseo
slo podra manejar 2.000 tweets entrantes por segundo, debido a
la latencia de base de datos. A un milln de tweets por segundo,
usted estara hablando de 500 servidores. Node, en cambio, maneja
cada conexin y no causa bloqueo, permitindole capturar tantos
tweets como se le puedan arrojar. Una mquina nodo capaz de
manejar 50.000 tweets por segundo, y usted estara hablando de
slo 20 servidores.
Estadsticas de videojuegos
Si usted alguna vez jug un juego como Call of Duty on-line,
algunas cosas le habrn llamado la atencin inmediatamente
cuando observ las estadsticas del juego, principalmente el hecho
Qu es AngularJS?