events.EventEmitter
Класс который реализует событийную модель в ноде
var EventEmitter = require('events').EventEmitter;
var ee = new EventEmitter;
ee.on('myevent', function(data) {});
ee.emit('myevent', {some: "data"});
//маленькая тонкость
ee.emit('error');//это свалит скрипт, если не будет подписки на событие с названием error, такая реализация только для события с этим названием
Есть несколько отличий между событийными моделями ноды и браузеров:
1) В ноде обработчики срабатывают в строгом порядке, в котором они были подписаны. В браузере в произвольном.
2) В браузере нет способа получить обработчики подписанные на обьект. В ноде есть
emitter.listeners(event);
В ноде есть у EventEmitter ограничение на количество обработчиков, которые можно подключать на конкретное событие, по-умолчанию == 10. Если количество начинает превышать нод бросает в поток вывода предупреждение о том, что возможны утечки памяти.
Иногда это ограничение нужно эмитеру нужно отключать, но нужно быть внимательным, и проследить чтобы краткоживущие обьекты не сохраняли ссылки на долгоживущий эмитер, а то утечка нам обеспечена.
Для диагностики таких проблем нам в помощь:
1) process.memoryUsage().heapUsed
2) модуль heapdump. Его дампы можно просматривать с помощью Google Chrome.
Комментариев нет:
Отправить комментарий