Clase EventEmitter
Emite evento data
:
emitter.emit('data', data);
Para recibir el evento data
:
emitter.on('data', function(data) {
console.log('Data: %s', data);
});
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 evento(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);
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'); });
Servidor de sockets
Control a bajo nivel de la conexión
Recibe datos, envía respuesta
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);
Manejar los eventos
error
y
end
Logar un error o un mensaje normal