Introducción práctica a

para



Día 2: módulo net, simplecached

Vuestro anfitrión

Alex Fernández

Ingeniero senior en LogTrust

Co-organizador de Node.js Madrid

@pinchito

Índice día 2


  • Módulo net.

  • Sesión práctica 1: Hola, mundo! (versión net).

  • Introducción a bases de datos NoSQL y memcached.

  • Qué es simplecached: base de datos simplificada.

  • Sesión práctica 2: Crea tu propio simplecached.


Módulo

NET

Módulo net


Recibe peticiones a un socket


Peticiones de bajo nivel


Es la base de http y https


Documentación

Sesión Práctica 1


Crea un servidor de sockets


Abre una conexión


Devuelve una respuesta


Accede al servidor

Especificación técnica

Servidor de sockets, puerto 1702


Al abrir una conexión, pregunta: "¿Hola?"

Al recibir "hola" responde "mundo" y termina

Cualquier otro mensaje resulta en "ERROR"


Nota técnica: ¡cuidado con los retornos de carro!

Siempre deben ser "\r\n".

Ayuda de net

Create server

var server = net.createServer(options, handleConnection) 

Listen on port

server.listen(port);

Handle connection

function handleConnection(socket) { … } 

Receive data

socket.on('data', function(data) { … }); 

Write data and finish

socket.end('string'); 

Good job!


Bonus Track


Mostrar una traza con el tiempo de cada petición


Manejar errores en la conexión


Manejar el cierre del socket


Cerrar el socket tras 10 segundos


Revisar continuaciones y clausuras

Bases de datos NoSQL


memcached

el Zoo NoSQL

Memcached



La base de datos clave-valor en memoria

¿Qué es Memcached?


Creada en 2003 por Brad Fitzpatrick para LiveJournal


NoSQL antes de que NoSQL fuera cool


Clave-valor


Almacenamiento en memoria (sin persistencia)


Y por supuesto, ¡ software libre!

Cacheo por capas

Almacenamiento de valores precalculados

Respuesta casi instantánea (~10 µs)


Uno de los dos grandes inventos en arquitecturas horizontales
(el otro es el gestor de colas)

API básico Memcached

set [key] [flags] [exptime] [bytes]\r\n
[data block]\r\n
  \=> STORED
  \=> NOT_STORED

almacena un valor en memoria

get [key]* \r\n
  \=> VALUE [key] [flags] [bytes]\r\n
      [data block]\r\n
      END\r\n
extrae uno o más valores por clave
delete [key]
  \=> DELETED
  \=> NOT_FOUND

borra un valor de memoria

Fuente: protocol.txt

API Completo

get, gets

set, add, replace, append, prepend, cas

delete

incr, decr,

touch

slabs

stats

flush_all, version, quit


Fuente: protocol.txt

Simplecached


Versión didáctica de Memcached


Simplifica el protocolo y los datos


Tres funciones: get, set, delete


El valor puede contener espacios (la clave no)

sin saltos de línea

Sesión de prácticas 2: Simplecached


Crear un servidor de simplecached


Implementar get, set, delete


Conectarse con consola (o PuTTY)

Especificación técnica

Servidor tipo memcached en el puerto 11311

set [key] [value]\r\n
  \=> STORED
  \=> NOT_STORED

almacena un valor en memoria

get [key]\r\n
  \=> VALUE [value]\r\n
  \=> END\r\n
extrae un valor por clave
delete [key]\r\n
  \=> DELETED
  \=> NOT_FOUND
borra un valor de memoria

Cualquier mensaje no conforme debe resultar en ERROR.

Ayuda


Eliminar espacios en los extremos

string.trim(); 

Divide una cadena en un array de trozos

string.split([separator]);

Devuelve un subarray desde una posición

array.slice([begin]);

Une un array en una cadena

array.join([separator]) 


Ayuda+


Un objeto JavaScript es un mapa asociativo por clave


El valor puede contener espacios (la clave no)


Cuidado con los casos de error

Good job!


Bonus Track: Comando Quit


Añadir un comando quit:

quit\r\n

cierra el cliente.  Ayuda: cierre de conexión

socket.end();


¡Verifica que tu software sea fácil de modificar!


Crear un cliente con Node.js

Fin del día 2