- Conocimientos sólidos de JavaScript
- ¿No los tienes?...
- No te preocupes XD da click aquí
- Node.js es emergente y cambiante... pero muy sólido
- Sé AUTODIDACTA
- Leé documentación
- Aprende inglés
- Debes manejar la terminal de comandos de tu S.O.
<< regresar al temario
¿Qué es Node.js?
-
Lo que todos sabemos
- Tiene JS
- Es Backend
- ¿Algo que ver con NoSQL?
- Sirve para hacer chats
-
Lo que no está tan claro
- ¿Es un framework JS?
- ¿Es una librería?
- ¿Qué tiene que ver v8?
- ¿Para qué sirve?(además de chats)
Node.js® is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
WTF!!!
¿Entonces?
-
Si...
-
Ruby tiene Rails
-
Python tiene Django
-
PHP tiene Laravel
-
JS ¿tiene a Node.js?
¡¡¡NO!!!
no es un Framework
Es una entorno de programación
Características de un lenguaje de programación
- Una gramática que define su sintaxis
- Un compilador que lo interpreta y ejecuta
- Mecanismos para interactuar con el exterior
- Librería estándar (consola, ficheros, red, etc.)
- Utilidades (intérprete, depurador, paquetes, etc.)
Características de un lenguaje de programación
-
V8
- Una gramática que define su sintaxis
- Un compilador que lo interpreta y ejecuta
-
Node.js
- Mecanismos para interactuar con el exterior
- Librería estándar (consola, ficheros, red, etc.)
- Utilidades (intérprete, depurador, paquetes, etc.)
Node.js
Ruby
Python
PHP
Lenguaje
JavaScript
Ruby
Python
PHP
Motor
V8
YARV
cPython
Apache
Entorno
Módulos del core
Librerias Standard
Librerias Standard
Librerias Standard
Frameworks
Express
Rails
Django
Laravel
¿Qué es Node.js?
- Plataforma de desarrollo de software creada en 2009
- JavaScript en el lado del servidor
- Basado en la máquina virtual de Chrome (V8 JavaScript Runtime)
- V8 esta escrito en C (muy rápido)
- Multiplataforma (Windows, Macintosh, Linux, etc.)
- Es una marca registrada y es open source
- Asíncrono y orientado a eventos
- Ideal para aplicaciones que consumen datos en tiempo real y que se ejecutan a través de dispositivos distribuidos
- Lo usan muchas empresas (WalMart, Paypal, Yahoo, LinkedIn, eBay, Uber, etc)
¿Por qué JavaScript?
JavaScript has certain characteristics that make it very different than other dynamic languages, namely that it has no concept of threads. Its model of concurrency is completely based around events
Ryan DahlWTF!!!
Lo que quizo decir es:
- Compila directamente a código máquina sin un intérprete gracias a V8
- Modelo I/O (entrada/salida) orientado a eventos, asíncrono y de no bloqueo, que lo hace ligero y eficiente
WTF!!!
<< regresar unidad 1
Entendamos
Paralelismo y Concurrencia
Bloqueante y No Bloqueante
Síncrono y Asíncrono
- Paralelismo: varios objetos realizando una acción cada uno simultáneamente(síncrono)
- Concurrencia: un solo objeto, con varias tareas “activas” entre las que va alternando(asíncrono)
Node.js es como un mesero
- Es un Patrón Reactor del mundo real
- Para aprovecharlo, tiene que haber varios clientes
- Un cliente no termina más rápido por asignarle un mesero exclusivo
- Cada cliente termina a su ritmo
comensales vs meseros
blocking vs non blocking
PHP vs Node.js
blocking vs non blocking
Infraestructura
PHP vs Node.js
Abriendo un fichero
Blocking
- Abrir el archivo
- Leer el archivo
- Imprimir contenido
- Hacer algo más
Non blocking
- Abrir el archivo
-
Leer el archivo
- Cuando termines, imprimir contenido
- Hacer algo más
Abriendo un fichero
PHP Blocking Code
<?php
printf('Abriendo Archivo...<br>');
$fichero_url = fopen('archivo.txt', 'r');
$texto = '';
while ( $trozo = fgets($fichero_url) ) {
$texto .= $trozo;
}
printf($texto);
printf('<br>Haciendo otra cosa');
?>
Abriendo un fichero
Node.js Blocking Code
var fs = require('fs')
console.log('\nAbriendo Archivo...')
var content = fs.readFileSync('archivo.txt', 'utf8')
console.log(content)
console.log('\nHaciendo otra cosa\n')
Abriendo un fichero
Node.js Non Blocking Code
var fs = require('fs')
console.log('\nAbriendo Archivo...')
var content = fs.readFile('archivo.txt', 'utf8', function (error, content){
console.log(content)
})
console.log('\nHaciendo otra cosa\n')
¿Cuál es la diferencia?
Callback
Es una pieza de código ejecutable que se pasa como argumento a otro código.
Con la callback estamos logrando un comportamiento asincrónico, es decir, de no bloqueo
El código se ejecuta y no espera a que la lectura se complete, cuando esta termine se imprime el contenido.
Evitando Callback Hell
var fs = require('fs')
console.log('\nAbriendo Archivo...')
function imprimir(error, content){
console.log(content)
}
var content = fs.readFile('archivo.txt', 'utf8', imprimir)
console.log('\nHaciendo otra cosa\n')
(también se puede con promesas)
<< regresar unidad 1
Características de Node.js
- Es concurrente sin paralelismo
- Es asíncrono y no bloqueante
- Orientado a eventos
- Single thread basado en callbacks
Si eres Frontend
- Es tu mejor opción para hacer backend por qué ya sabes JavaScript (o deberías
XD
)
- Si no te interesa el backend, sus módulos te harán mejor frontend (bower, grunt, gulp, less, browserify, etc.)
- Si tu editor de código es brackets ya usas Node.js
=D
- Puedes comenzar tu carrera como Full Stack JavaScript Developer (MEAN.JS o MEAN.IO)
¿Qué podemos hacer?
- Aplicaciones cliente - servidor
- Aplicaciones servidor - servidor (networking)
- Chats, Juegos, Clientes de Correo, Traductores
- Aplicaciones Colaborativas y Redes Sociales
- Estadísticas y Analíticas
- Aplicaciones de Red (línea de comandos o admin. de sistemas)
- Sitios Web, Blogs y CMS's
- Controlar Hardware
- En un futuro... dominar al mundo... \
}=D
/ de la web
No podrás decir qué no
-
Arquitectura unificada(JavaScript Full Stack)
- Código reutilizable(frontend, backend y base de datos)
-
Excelente rendimiento y escalabilidad
- Fuerte y apasionada comunidad
- Desarrolladores felices
:)
Sólo considera qué...
-
JS en el Frontend
- No me importa el S.O.
- No hay datos binarios
- Apenas hay E/S
- Un único usuario
- Todo es accesible con objetos y valores primitivos
-
JS en el Backend
- Llamadas al S.O.
- Muchos datos binarios
- Muchas E/S
- Usuarios y permisos
- Puertos y Servidores
- Middlewares
- ...
<< regresar unidad 1
Es un fork amigable de Node.js™, compatible con npm, liderado bajo un modelo de open governance
io.js
Fué lidereado por los contribuyentes más activos de Node.js y el CEO de NPM
Su objetivo fue arreglar de lo que carecía Node.js
io.js
- Soporte para las últimas versiones de V8
- Desarrollo activo haciendo liberaciones semanales
- Integración continua y ejecución de pruebas al 100%
- Vinculación con la comunidad
- Gobernabilidad abierta por la comunidad y no por empresas
- Hoja de ruta predecible
- Versiones compatibles con SemVer
- Comienzó a incrementar su actividad
La reacción de Joyent, propietario de Node.js fue lanzar la versión 0.12.X que la comunidad estaba esperando por casi 2 años, con ello Joyent logra mantener la paridad de características con io.js
Todo esto sucede en diciembre del 2014
io.js se libera el 13 de enero del 2015
- Limita objetivos a largo plazo
- Soporte completo en servidores y gestores de paquetes
- Marca ampliamente conocida y reconocida
- Comunidad muy activa
- Soporte a ES6
- Rendimiento ligeramente superior
- Liberaciones rápidas utilizando semver
La Reconciliación
La comunidad io.js es inflexible sobre el mantenimiento de la paridad de características.
Ambas partes han manifestado en repetidas ocasiones su intención general de la reconciliación.
La fundación Linux se ha ofrecido como mediador en la situación.
Que consta de 2 partes:
Un consejo de fundación encargado de la parte legal, marca, mercadotecnia y fondos
Un comite técnico que actué de forma independiente y permita el crecimiento del ecosistema JS en el servidor
Al proceso se le llamó Node Convergence dando como resultado Node 4
¿Por qué saltaron de la versión 0.12.X a la 4.0.0?
Desde el surgimiento de io.js se fueron liberando versiones semanales hasta llegar a la 3.3.X
En consideración a esta evolución y al fuerte compromiso de la comunidad activa que se matuvo viva y fuerte por hacer crecer el ecosistema de JavaScript en el servidor, se decide relanzar Node en la versión 4.0.0
Cronología de Node 4
-
Ene 15: Se libera io.js.
-
Feb 15: Se anuncia la Fundación Node.js.
-
Mar 15: Se distribuyen las normas de la Fundación.
-
May 15: io.js entra a la Fundación.
-
Jun 15: Lanzamiento oficial de la Fundación.
-
Jul 15: Se establece el comité directivo.
-
Ago 15: Primer cumbre de colaboración en SFO.
-
Sep 15: Se libre de forma estable Node versión 4.0.0.
-
Dic 15: La dominación del mundo
}:)
+ info
JS es el futuro de la web
):D
/
Probando Instalación
- Abrir una terminal de comandos
- node -v
- npm -v
Terminal de Comandos
Recomendaciones
- Recuerda que para el correcto funcionamiento de Node.js tu usuario debe ser Administrador del Equipo
-
Si tu terminal no reconoce los comandos:
- En Mac o Linux debes ejecutarlos con el comando sudo
- En Windows, reinicia y verifica que en las variables de entorno exista NODE_PATH
El núcleo de Node.js esta formado por poco más de 35 módulos
Es importante revisar su nivel de estabilidad al usarlos:
- 0 - Deprecated
- 1 - Experimental
- 2 - Stable
- 3 - Locked
Toda la información del núcleo está en el API DOCS
Es el gestor de paquetes de Node.js...
y de todo JavaScript
Instalando paquetes
Tipos de Instalación
-
Única: npm install nombre-paquete (no se recomienda)
-
Global: npm install nombre-paquete -g
-
Como dependencia del proyecto:npm install nombre-paquete --save
-
Como dependencia de desarrollo:npm install nombre-paquete --save-dev
Documentación NPM
Paquetes Globales
- Se instalan localmente en nuestro ordenador
- Estan disponibles en todo momento
- Son paquetes que nos ayudarán con tareas administrativas (monitoreo, depuración, automatización, etc.)
Dependencias del Proyecto
- Paquetes externos al core
- Desarrollados por la comunidad
- Al instalarlos quedan registrados en el achivo de configuración (package.json)
- creación (npm init)
- configuración
-
instalar paquetes como dependencias:npm install nombre-paquete --save
-
instalar dependencias de un proyecto:npm install
(Debe existir el archivo package.json)
- Revisar Semantic Versioning para el correcto versionado de nuestros paquetes.
Paquetes como dependencias
Dependencias de Desarrollo
- Paquetes externos al core
- Desarrollados por la comunidad
- Facilitan y optimizan tareas comunes de desarrollo y publicación
- Al instalarlos quedan registrados en el package.json
- npm install nombre-paquete --save-dev
Node.js maneja la asincronía utilizando callbacks
- Continuaciones explícitas como funciones
- Cuando termines... ejecuta otra función
Los callbacks tienen muchas ventajas
- Muy fáciles de entender e implementar
- Familiares para el programador JS
- Extremadamente flexibles
- Un mecanismo universal de asincronía
Promesas
Una manera alternativa de modelar asincronía
- Construcción explícita del flujo de ejecución
- Separación en bloques consecutivos
- Manejo de errores más controlado
- Combinación de diferentes flujos asíncronos
promesa = flujo de ejecución
Promesas
Ventajas
- Código mucho más ordenado y legible
- Mejor control de errores
- Podemos manipular el flujo
- Añadir nuevas etapas
- Devolverlo en funciones
- Pasarlo como parámetro
- Podemos combinar varios flujos
-
.then(succes,[error])
- Concatena bloques
-
El nuevo bloque (success)...
- Sólo se ejecuta si el anterior lo hace sin errores
- Recibe como parámetro el resultado del bloque anterior
-
Devuelve el valor que se le pasará al siguiente bloque
- Si es un dato, se pasa tal cual
- Si es una promesa, se resuelve
-
.fail(error)
- El segundo parámetro es un manejador de error
Las promesas se resuelven o se rechazan y se dividen en 2:
-
La promesa en sí
- Interfaz que construye flujos
- (.then y .fail)
-
Su diferido
- Interfaz que controla los flujos
- (.reject y .resolve)
Casi todos los módulos de Node.js que realizan una operación asíncrona siguen el mismo flujo:
- Reciben una callback como último parámetro
-
El callback recibe uno o más parámetros:
-
Generalmente el primero indica si hay error:
- Si es falso todo OK
- Si es verdadero es el Error
Frameworks
es un marco de herramientas diseñado para apoyar el desarrollo de sitios dinámicos, aplicaciones y servicios web. Intenta aliviar el exceso de carga asociado con actividades comunes usadas en el desarrollo web. Por ejemplo, acceder a bases de datos, estructuras para plantillas y gestión de sesiones, y con frecuencia facilitan la reutilización de código.
Express
- Estrictamente web (microframework)
- Sencillo, flexible y minimalista
- Muy popular
- Se adapta muy bien a la filosofía de Node
- Similar a Sinatra, Sylex, Flask, Spark, etc.
Express nos va ayudar con:
- Rutas
- Parámetros
- Formularios y subida de ficheros
- Cookies
- Sesiones
- Templates
Express NO nos va ayudar con:
- Base de datos / ORM
- Autenticación de usuarios
- Seguridad
- Migraciones
- Deployment
- Organización del código
Concretamente Express:
- Construye sobre http
-
Procesa la petición a través middlewares
- Asocia rutas a manejadores
- Procesa los objetos req y res
- Visualiza templates
- Nosotros escogemos qué middlewares queremos usar, y en qué orden
¿Qué nos aporta express, exactamente?
- Depende de los middlewares que usemos
- Algunas cosas vienen por defecto
Let's to Code! \
XD
/
Pero... NO te olvides del API Doc
Configurando la aplicación
- Crear algunas propiedades globales
- Especificar el stack de middlewares
¿Cómo la configuramos?
- Estableciendo: app.set(propiedad, valor)
- Obteniendo: app.get(propiedad)
- Usando: app.use(middleware)
Son módulos “plug and play” que se pueden apilar arbitrariamente en cualquier orden y proveen cierta funcionalidad
-
Filtros: procesan tráfico entrante/saliente, pero no responden a ninguna petición. Por ejemplo bodyParser
-
Proveedores: ofrecen respuestas automáticas a algún tipo de petición. Por ejemplo static
Middlewares
Escribir middlewares para express es muy sencillo:
-
Una función que recibe 3 parámetros:
req, res, next
-
Al terminar su tarea, tiene que invocar a next()
-
Sin parámetro: se invoca al siguiente middleware del stack
-
Con parámetro: se cambia la ruta a lo que se pase como parámetro
-
Dos maneras de activar middlewares:
-
Globalmente (app.use), activos para toda la app
-
Locales para ciertas rutas
Express se ayuda de paquetes adicionales, para mantener su core simple y minimalista
Sirve el favicon de la aplicación
- Debe ser el primero
- Para evitar peticiones inncesarias
Registro de Actividad
- Muchas opciones...
- Se suele poner debajo de express.favicon()
Parsea las cookies de la petición
- Opcional: firmar cookies con secreto
- Crea el objeto req.cookies
Parsea el cuerpo de las peticiones
-
Decodifica
- application/json
- application/x-www-form-urlencoded
- multipart/form-data
- Crea el objeto req.body con los parámetros
- Crea el objeto req.files con los ficheros que se han subido desde un formulario
Inicializa y parsea los datos de sesión del usuario
- Crea el objeto req.session
- Utilizando cookies como almacenamiento
-
Algunas opciones:
- secret: firma de segurdad para la cookie
- maxAge: duración en ms
- path: ruta para la que es válida la cookie
- httpOnly: protección solo en el protocolo http
Sirve los ficheros estáticos dentro de directorio
- ¡Muy útil! Se pone cerca del final
- Cachea los ficheros
- La variable global __dirname contiene el directorio donde reside el script en ejecución
Templates Engines
Express tiene un mecanismo para renderizar plantillas
- Agnóstico
- Modular
- Simple
- NO trae ningún motor de templates por defecto
Templates Engines
res.render(view, [locals], callback)
- view: ruta del template
- locals: valores a interpolar
- callback: function(err, html) { ... }
- Es la plataforma de blog de Node.js
- Es libre y de código abierto
- Creada por John O'Nolan en 2013
- ¿Es el WordPress de Node.js?
Un poco de Historia:
- O'Nolan era el lider adjunto del equipo de interfaz de usuario de WordPress
- En noviembre de 2012 al sentirse frustrado de usar WordPress como plataforma de blogs comienza a gestar una plataforma que fuera más simple, sencilla y limpia
- En abril de 2013 comienza una campaña de crowdfunding en Kickstarter para comenzar Ghost
- En septiembre de 2013 se libera la primer versión de Ghost
- En octubre de 2013 se libera el código en github
¿Porqué Ghost, teniendo WordPress?
- WordPress es más que sólo una plataforma de Blog
- Algunas diferencias interesantes
Aplicaciones REST
VS
Aplicaciones CRUD
Representational State Transfer
Transferencia de Estado Representacional
REST
Es una técnica de arquitectura software para sistemas hipermedia distribuidos como Internet
El término lo acuña Roy Fielding en su tesis doctoral del año 2000 sobre la web
Es uno de los principales autores de la especificación del protocolo HTTP
REST se basa en las operaciones del protocolo HTTP
REST afirma que la web ha disfrutado de escalabilidad como resultado de una serie de diseños fundamentales clave:
-
Un protocolo cliente/servidor sin estado
-
Un conjunto de operaciones bien definidas que se aplican a todos los recursos de información
-
Una sintaxis universal para identificar los recursos
-
El uso de hipermedios
Los sistemas que siguen los principios REST se llaman con frecuencia RESTful
Los estados HTTP de una API REST son:
Más informción sobre REST:
CRUD
Create, Read, Update and Delete
ABCC
Altas, Bajas, Cambios y Consultas
En computación se usa para referirse a las funciones básicas que un sistema utiliza para interactuar con su capa de persistencia (bases de datos).
<< regresar unidad 5
Gestores SQL
VS
Gestores NoSQL
Persistencia en Node.js
Prácticamente se puede trabajar con cualquier base de datos:
- Transaccionales
- Relacionales
- Documentales
- Orientada a Objetos
- Clave/Valor
- de Grafos
- etc
En el curso trabajaremos con:
BD Documental
BD Transaccional
(NO SQL - BSON)
(SQL)
Colecciones y Documentos
Tablas y Registros
<< regresar unidad 5
¿Qué es MongoDB?
Una base de datos NoSQL...
- Sin esquema
- Alto rendimiento
- Almacena documentos BSON
- Enfocada en escalabilidad horizontal
- Lenguaje de consultas potente
- Sin transacciones
- Agregado de datos
¿Qué es MongoDB?
Una base de datos de documentos
- No impone forma a los datos
- No necesita migraciones/reestructuración de la BBDD
- Permite estructuras muy complejas
-
Herramientas potentes de agregado con JavaScript
- Map-Reduce
- Aggregation Pipeline
¿Qué es MongoDB?
Con algunos extras interesantes...
- Índices geoespaciales
- Búsquedas FTS
- Almacenamiento eficiente de blobs y ficheros
- Sharding automático
- Replicación
¿Qué es MongoDB?
Es una buena alternativa para... ¡muchas cosas!
- Prototipos y aplicaciones simples
- Hacer la transición de front a back
- Aplicaciones con mucha carga de escritura
- Agregado de datos a un nivel medio/alto
- Aplicaciones con datos muy heterogéneos
- Enormes colecciones de datos (sharding)
- Almacenar ficheros (sharding)
¿Qué NO es MongoDB?
- No puede hacer JOINs
- El lenguaje de consulta menos potente que SQL
- No tiene transacciones
-
Ten cuidado:
- Es muy fácil empezar con MongoDB
- Si tu app crece mucho... vas a necesitar JOINs
MongoDB no puede hacer JOINs
- Sin embargo, se pueden empotrar documentos y arrays
- Profundidad y complejidad arbitraria
- El límite: documento < 16MB
- Se suelen favorecer los diseños desnormalizados
La idea general de MongoDB
Es un almacén de documentos
- Básicamente, objetos JSON (BSON)
- Dividido en colecciones
- Consultas basadas en la estructura del documento
- ¡Se integra genial con JavaScript!
Requisitos:
- Instalar
- Iniciar el servicio mongod en la terminal
- Iniciar el cliente mongo en otra terminal
- Documentación
Cliente Mongo
MongoDB trae un cliente de línea de comandos
- mongo host/dbname
- Ejecuta JavaScript
- Muy práctico para explorar
Conceptos básicos
- La base de datos está dividida en colecciones
- Las colecciones tienen documentos
- Los documentos son objetos BSON (JSON Binario )
Colecciones
Una colección es una agrupación de documentos
- Puede alojar cualquier documento (no impone estructura)
- Puede alojar documentos con diferentes formas
- Operaciones de consulta
- Es donde se ponen los índices
Estructura de un Documento
{
"_id" : ObjectId("524872a99c50880000000001"),
"email" : "j@bextlan.com",
"password" : "qwerty",
"name" : "Jonathan",
"date" : 1380479657300,
"token" : "hm6ly43v.0o1or"
}
Un documento puede contener arreglos y otros documentos
{
"_id" : ObjectId("5249a2e9b90687d56453b2f3"),
"text" : "Soy un comentario",
"user" : {
"_id" : ObjectId("524872a99c50880000000001"),
"nombre" : "Usuario Prueba",
"avatar" : "/img/user-test.jpg"
},
"tags" : [ "test", "prueba" ]
}
Operaciones con colecciones:
-
collection.save: guardar/actualizar un documento
-
collection.insert: inserta un documento
-
collection.findOne: recuperar un documento
-
collection.find: recuperar varios documentos
-
collection.remove: borrar uno o varios documentos
-
collection.drop: elimina la colección
-
collection.rename: cambia de nombre la colección
-
collection.count: número de documentos
Operadores de Búsqueda:
-
$gt / $gte: mayor/mayor o igual
-
$lt / $lte: menor/menor o igual
-
$ne: diferente
-
$in / $nin: en/no en array de valores
micol.findOne({ valor: {$in:[5,15]} }, cb)
Operadores Lógicos:
-
$or: se cumple alguna cláusula
-
$and: se cumplen todas las cláusulas
-
$nor: el resultado opuesto
-
$not: no se cumplen todas las cláusulas
micol.findOne({
$or:[
{valor: 5},
{
precio:{ $gt: 15 }
}
]
},callback)
Consulta
El operador find(...) devuelve un cursor
- Representa un conjunto de resultados
-
cursor.count(cb): cantidad de documentos
-
cursor.limit(n): limitar a n documentos
-
cursor.skip(n): saltarse los n primeros documentos
-
cursor.nextObject(cb): siguiente documento
-
cursor.each(cb): para cada doc, en orden
-
cursor.toArray(cb): convierte el cursor en array
Ordenación
cursor.sort(opciones, [cb])
- Ordenar los resultados
- Opciones del tipo:
- [[“campo”, 1], [“otroCampo”, -1]]
- 1 para ascendente, -1 para descendente
coleccion.find()
.sort([['a', -1]])
.nextObject(function(err, item) {
// ...
})
Inserción
insert(<documento o array>)
- Inserta uno o varios documentos en la colección
db.micol.insert([
{ nombre: "Usuario Prueba" },
{ nombre: "Usuario Prueba 2" }
])
Modificación
El operador más sencillo para modificar: save
- Si el documento es nuevo (no tiene _id), lo inserta
- Si el documento ya existe, lo modifica
db.micol.save({ nombre: "Usuario Prueba" })
Eliminación
remove(<patrón>)
- Elimina los documentos que satisfagan la búsqueda
db.micol.remove({ nombre: "Usuario Prueba" })
Protocolo de comunicación
- Full-duplex
- Una sola conexión permanente
- Stream de mensajes
- Contenido en tiempo real
¿Qué son websockets?
Es decir...
- El cliente puede enviar y recibir datos en tiempo real
- Orientado a "eventos" (mensajes)
- Siempre conectado
- Baja latencia
Websockets y Node.js
Funcionan bien
}=D
- El servidor maneja muchas conexiones simultáneas
- Buena integración con JSON
- Eventos
¿Para qué sirven?
Fundamentalmente, para:
- Actividades colaborativas
- Juegos multijugador
- Enviar datos
- Cargar recursos
- En resumen: tiempo real en vez de "a petición"
<< regresar unidad 6
Socket.IO
Vamos a usar Socket.IO
- Una librería para manipular websockets
- Muy popular
- Fallback para navegadores obsoletos
- Muy fácil de usar
- Servidor / Cliente
- API DOC
Socket.IO
Los sockets emiten eventos
- Un evento = un "mensaje"
- Se pueden pasar parámetros
- socket.on(mensaje, callback)
- socket.emit(mensaje, [param1, param2, ...])
Socket.IO
Eventos reservados en el:
-
Servidor:
- io.sockets.on("connection", cb)
- socket.on("message", cb)
- socket.on("disconnect", cb)
-
Cliente:
- socket.on("connect", cb)
- socket.on("disconnect", cb)
- socket.on("error", cb)
- socket.on("message", cb)
Streaming de Video:
Considerar las siguientes API's:
Opciones de Hosting para Node.js
-
☓Hosting Compartido
-
✔Hosting Dedicados
-
✔Hosting Virtuales (VPS)
-
✔Hosting en la Nube (Cloud Service)
-
+ info
Para esta ocasión usaremos Digital Ocean
Considerar los siguientes posts:
Curso Node.js
de Bextlán
por @jonmircha
SLIDES
jonmircha.github.io/slides-nodejs