Curso de
Día 5: Eventos
Vuestro anfitrión
(según mi hija de 5 años)
Ingeniero senior en MediaSmart Mobile
Co-organizador de Node.js Madrid
@pinchito
Guión
- Eventos
- Sesión práctica: emisor de eventos
Eventos
Asincronía al poder
Emisor de eventos
Clase EventEmitter
Emite evento data
:
emitter.emit('data', data);
Para recibir el evento data
:
emitter.on('data', function(data) {
console.log('Data: %s', data);
});
API de recepción
emitter.on(event, function(data) {});
Registra un listener para un evento
emitter.once(event, function(data) {});
Registra un listener para una sola vez
emitter.removeListener(event, listener);
Elimina un listener
emitter.removeAllListeners([event]);
Elimina todos los listeners, opcionalmente para un eventoLa temible fuga de memoria
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Ocurre cuando se añaden listeners a un emisor
y no se eliminan
Ejemplo: reutilización de conexiones en un servidor
Solución: al terminar cada petición eliminar listener
emitter.removeListener('event', listener);
Emitiendo Eventos
Podemos crear nuestros propios EventEmitters:
Esto nos permite gestionar eventos en lugar de callbacksvar events = require('events'); var util = require('util'); function MyEmitter() { events.EventEmitter.call(this); http.createServer(function (request, response) { this.emit('request', request); res.end('Hello World\n'); }).listen(1337, '127.0.0.1', function() { this.emit('init'); }); } util.inherits(LimitsUpdater, events.EventEmitter);
var emitter = new MyEmitter(); emitter.on('init', function() { console.log('Server started'); });
Sesión práctica 3: hola, mundo (again)
Servidor de sockets
Control a bajo nivel de la conexión
Recibe datos, envía respuesta
Hola, mundo (sockets)
var net = require('net');
var port = 1702;
var server = net.createServer(function(connection) {
console.log('Connection open');
connection.write('Hello?\r\n');
connection.on('data', function(data) {
if (String(data).trim() != 'hello') {
connection.write('ERROR\r\n');
} else {
connection.end('world\r\n');
console.log('connection closed');
}
});
});
server.listen(port);
Contiene tres niveles de ejecución
Ejercicios
Manejar los eventos
error
y
end
Logar un error o un mensaje normal
¡Buen trabajo!
Thanks!
Curso de Node.js Amaris: Eventos
By Alex Fernández
Curso de Node.js Amaris: Eventos
Curso para Amaris de Node.js, 2014-11-03: eventos
- 2,399