Alex Fernández
Ingeniero senior en LogTrust
Co-organizador de Node.js Madrid
Recibe peticiones a un socket
Peticiones de bajo nivel
Es la base de http y https
Crea un servidor de sockets
Abre una conexión
Devuelve una respuesta
Accede al servidor
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".
var server = net.createServer(options, handleConnection)
server.listen(port);
function handleConnection(socket) { … }
socket.on('data', function(data) { … });
socket.end('string');
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
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!
Almacenamiento de valores precalculados
Respuesta casi instantánea (~10 µs)
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
get, gets
set, add, replace, append, prepend, cas
delete
incr, decr,
touch
slabs
stats
flush_all, version, quit
Fuente: protocol.txt
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
Crear un servidor de simplecached
Implementar get, set, delete
Conectarse con consola (o PuTTY)
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
.
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]);
array.join([separator])
Un objeto JavaScript es un mapa asociativo por clave
El valor puede contener espacios (la clave no)
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