Node.js EventEmitter Reference

Node.js இல் நிகழ்வு-ஆதாரமான நிரலாக்கத்தின் மையமான EventEmitter ஐ அறிக

EventEmitter பொருள்

EventEmitter என்பது Node.js இல் பொருள்களுக்கு இடையேயான தகவல்தொடர்பை எளிதாக்கும் ஒரு தொகுதியாகும். இது Node இன் அசிங்க்ரோனஸ் நிகழ்வு-ஆதாரமான கட்டமைப்பின் மையத்தில் உள்ளது.

Node இன் உள்ளமைக்கப்பட்ட பல தொகுதிகள் EventEmitter இலிருந்து பரம்பரை பெறுகின்றன, HTTP சேவையகங்கள், ஸ்ட்ரீம்கள் மற்றும் பலவும் அடங்கும்.

EventEmitter ஐ இறக்குமதி செய்தல்

// முறை 1: require பயன்படுத்துதல்
const EventEmitter = require('events');

// முறை 2: ES6 destructuring
const { EventEmitter } = require('events');

EventEmitter உருவாக்குதல்

const EventEmitter = require('events');

// புதிய EventEmitter நிகழ்வை உருவாக்கவும்
const myEmitter = new EventEmitter();

// EventEmitter ஐ விரிவுபடுத்தும் வகுப்பை உருவாக்கவும்
class MyEmitter extends EventEmitter {
  constructor() {
    super();
  }
}

// விரிவுபடுத்தப்பட்ட வகுப்பை உருவாக்கவும்
const myExtendedEmitter = new MyEmitter();

EventEmitter முறைகள்

முறை விளக்கம்
addListener(event, listener) குறிப்பிட்ட நிகழ்வுக்கான கேட்போர் வரிசையின் முடிவில் ஒரு கேட்போரைச் சேர்க்கிறது. on()க்கான மாற்றுப் பெயர்.
emit(event, [arg1], [arg2], ...) நிகழ்விற்குப் பதிவுசெய்யப்பட்ட ஒவ்வொரு கேட்போரையும் அவை பதிவுசெய்யப்பட்ட வரிசையில் ஒத்திசைவாக அழைக்கிறது, வழங்கப்பட்ட வாதங்களை ஒவ்வொருவருக்கும் அனுப்புகிறது.
eventNames() எமிட்டருக்குப் பதிவுசெய்யப்பட்ட கேட்போர்கள் உள்ள நிகழ்வுகளை பட்டியலிடும் ஒரு வரிசையை வழங்குகிறது.
getMaxListeners() emitter.setMaxListeners(n) மூலம் அமைக்கப்பட்ட அல்லது EventEmitter.defaultMaxListeners இல் இருப்பு மதிப்பாக உள்ள EventEmitter க்கான தற்போதைய அதிகபட்ச கேட்போர் மதிப்பை வழங்குகிறது.
listenerCount(event) குறிப்பிட்ட நிகழ்வைக் கேட்கும் கேட்போர்களின் எண்ணிக்கையை வழங்குகிறது.
listeners(event) குறிப்பிட்ட நிகழ்வுக்கான கேட்போர்களின் வரிசையின் நகலை வழங்குகிறது.
off(event, listener) removeListener()க்கான மாற்றுப் பெயர்.
on(event, listener) குறிப்பிட்ட நிகழ்வுக்கான கேட்போர் வரிசையின் முடிவில் ஒரு கேட்போரைச் சேர்க்கிறது.
once(event, listener) ஒரு முறை மட்டும் தூண்டப்பட்ட பிறகு நீக்கப்படும் நிகழ்வுக்கான ஒரு முறை கேட்போரைச் சேர்க்கிறது.
prependListener(event, listener) குறிப்பிட்ட நிகழ்வுக்கான கேட்போர் வரிசையின் தொடக்கத்தில் ஒரு கேட்போரைச் சேர்க்கிறது.
prependOnceListener(event, listener) ஒரு முறை மட்டும் தூண்டப்பட்ட பிறகு நீக்கப்படும் நிகழ்வுக்கான கேட்போர் வரிசையின் தொடக்கத்தில் ஒரு முறை கேட்போரைச் சேர்க்கிறது.
removeAllListeners([event]) அனைத்து கேட்போர்களையும் அல்லது குறிப்பிட்ட நிகழ்வின் கேட்போர்களையும் நீக்குகிறது.
removeListener(event, listener) குறிப்பிட்ட நிகழ்வுக்கான கேட்போர் வரிசையிலிருந்து குறிப்பிட்ட கேட்போரை நீக்குகிறது.
setMaxListeners(n) ஒரு EventEmitter நிகழ்வில் சேர்க்கக்கூடிய அதிகபட்ச கேட்போர்களின் எண்ணிக்கையை அமைக்கிறது.
rawListeners(event) குறிப்பிட்ட நிகழ்வுக்கான கேட்போர்களின் வரிசையின் நகலை வழங்குகிறது, எந்தவொரு மூடல்களையும் (once() மூலம் உருவாக்கப்பட்டவை போன்றவை) உள்ளடக்கியது.

EventEmitter பண்புகள்

பண்பு விளக்கம்
EventEmitter.defaultMaxListeners அனைத்து EventEmitter நிகழ்வுகளுக்கும் இருப்பு அதிகபட்ச கேட்போர்களின் எண்ணிக்கையை அமைக்கிறது. இருப்பு 10.
emitter.errorMonitor 'error' நிகழ்வுகளைக் கண்காணிக்க மட்டும் ஒரு கேட்போரை நிறுவ பயன்படுத்தக்கூடிய ஒரு நிலையான சின்னம்.
emitter.captureRejections உண்மையாக இருக்கும்போது, வாக்குறுதி நிராகரிப்புகள் பிடிக்கப்பட்டு 'error' நிகழ்வுகளாக வெளியிடப்படுகின்றன.

அடிப்படை EventEmitter பயன்பாடு

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// நிகழ்வு கேட்போரைப் பதிவு செய்யவும்
myEmitter.on('event', () => {
  console.log('ஒரு நிகழ்வு நடந்தது!');
});

// நிகழ்வை வெளியிடவும்
myEmitter.emit('event');

கேட்போர்களுக்கு வாதங்களை அனுப்புதல்

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// பல வாதங்களுடன் நிகழ்வு
myEmitter.on('status', (code, message) => {
  console.log(`நிலை கிடைத்தது: ${code} ${message}`);
});

// வாதங்களுடன் வெளியிடவும்
myEmitter.emit('status', 200, 'OK');

ஒரு முறை நிகழ்வு கேட்போர்கள்

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// ஒரு முறை கேட்போரைச் சேர்க்கவும்
myEmitter.once('onetime', () => {
  console.log('இது ஒரு முறை மட்டுமே அழைக்கப்படும்');
});

// முதல் வெளியீடு - கேட்போரைத் தூண்டும்
myEmitter.emit('onetime');

// இரண்டாவது வெளியீடு - கேட்போரைத் தூண்டாது
myEmitter.emit('onetime');

பிழை நிகழ்வுகள்

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// பிழை நிகழ்வு கையாளுதல்
myEmitter.on('error', (err) => {
  console.error('பிழை ஏற்பட்டது:', err.message);
});

// பிழை நிகழ்வை வெளியிடவும்
myEmitter.emit('error', new Error('ஏதோ தவறு நடந்தது'));

// 'error' கேட்போர் சேர்க்கப்படவில்லை என்றால், Node வீசி கிராஷ் ஆகும்
// எப்போதும் பிழை கையாளுதலைச் சேர்க்கவும்!

நிகழ்வு பெயர்கள் மற்றும் கேட்போர்களைப் பெறுதல்

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// சில கேட்போர்களைச் சேர்க்கவும்
myEmitter.on('event1', () => console.log('நிகழ்வு 1'));
myEmitter.on('event2', () => console.log('நிகழ்வு 2'));
myEmitter.on('event2', () => console.log('நிகழ்வு 2 மீண்டும்'));

// அனைத்து நிகழ்வு பெயர்களையும் பெறவும்
console.log('நிகழ்வு பெயர்கள்:', myEmitter.eventNames());

// குறிப்பிட்ட நிகழ்வுக்கான கேட்போர்களைப் பெறவும்
console.log('event2 க்கான கேட்போர்கள்:', myEmitter.listeners('event2'));

// கேட்போர்களை எண்ணுங்கள்
console.log('event2 க்கான கேட்போர் எண்ணிக்கை:', myEmitter.listenerCount('event2'));

கேட்போர்களை நீக்குதல்

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// கேட்போர் செயல்பாட்டை வரையறுக்கவும் (நீக்கத்திற்குத் தேவை)
function listener1() {
  console.log('கேட்போர் 1 இயக்கப்பட்டது');
}

function listener2() {
  console.log('கேட்போர் 2 இயக்கப்பட்டது');
}

// கேட்போர்களைச் சேர்க்கவும்
myEmitter.on('event', listener1);
myEmitter.on('event', listener2);

console.log('நீக்குவதற்கு முன் கேட்போர்கள்:', myEmitter.listenerCount('event'));

// குறிப்பிட்ட கேட்போரை நீக்கவும்
myEmitter.removeListener('event', listener1);
// அல்லது மாற்றுப் பெயரைப் பயன்படுத்துதல்: myEmitter.off('event', listener1);

console.log('நீக்கிய பின் கேட்போர்கள்:', myEmitter.listenerCount('event'));

// ஒரு நிகழ்வுக்கான அனைத்து கேட்போர்களையும் நீக்கவும்
myEmitter.removeAllListeners('event');

console.log('அனைத்தையும் நீக்கிய பின் கேட்போர்கள்:', myEmitter.listenerCount('event'));

அதிகபட்ச கேட்போர்களை அமைத்தல்

const EventEmitter = require('events');

// அனைத்து EventEmitter நிகழ்வுகளுக்கும் இருப்பு அதிகபட்ச கேட்போர்களை அமைக்கவும்
EventEmitter.defaultMaxListeners = 15;

const myEmitter = new EventEmitter();

// குறிப்பிட்ட நிகழ்வுக்கான அதிகபட்ச கேட்போர்களை அமைக்கவும்
myEmitter.setMaxListeners(20);

console.log('இருப்பு அதிகபட்ச கேட்போர்கள்:', EventEmitter.defaultMaxListeners);
console.log('myEmitter அதிகபட்ச கேட்போர்கள்:', myEmitter.getMaxListeners());

// maxListeners ஐ விட அதிகமாகச் சேர்ப்பது எச்சரிக்கையைத் தூண்டும்
// எச்சரிக்கை சாத்தியமான நினைவக கசிவுகளை அடையாளம் காண உதவுகிறது

கேட்போர்களின் வரிசை

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// இருப்பு நடத்தை: கேட்போர்கள் சேர்க்கப்பட்ட வரிசையில் இயக்கப்படும்
myEmitter.on('event', () => console.log('முதல் கேட்போர்'));
myEmitter.on('event', () => console.log('இரண்டாவது கேட்போர்'));

// முன்னோட்ட கேட்போரைச் சேர்க்கவும் (அது முதலில் இயக்கப்படும்)
myEmitter.prependListener('event', () => console.log('முன்னோட்ட கேட்போர்'));

// ஒரு முறை முன்னோட்ட கேட்போர்
myEmitter.prependOnceListener('event', () => console.log('முன்னோட்ட ஒரு முறை கேட்போர்'));

// நிகழ்வை வெளியிடவும்
myEmitter.emit('event');

// வெளியீடு இருக்கும்:
// முன்னோட்ட ஒரு முறை கேட்போர்
// முன்னோட்ட கேட்போர்
// முதல் கேட்போர்
// இரண்டாவது கேட்போர்

EventEmitter ஐ விரிவுபடுத்துதல்

Node.js இல் ஒரு பொதுவான முறை EventEmitter ஐ விரிவுபடுத்தும் ஒரு வகுப்பை உருவாக்குவதாகும், தனிப்பட்ட செயல்பாட்டைச் சேர்ப்பது:

const EventEmitter = require('events');

// EventEmitter ஐ விரிவுபடுத்தும் தனிப்பட்ட வகுப்பு
class MyApp extends EventEmitter {
  constructor() {
    super();
    this.name = 'MyApp';
  }

  process(data) {
    // சில செயலாக்கங்களைச் செய்யுங்கள்
    console.log(`தரவைச் செயலாக்குகிறது: ${data}`);
    
    // செயலாக்க முடிவுகளின் அடிப்படையில் நிகழ்வுகளை வெளியிடவும்
    if (data.length > 10) {
      this.emit('large-data', data);
    } else {
      this.emit('small-data', data);
    }
    
    // முடிவு நிகழ்வை வெளியிடவும்
    this.emit('processed', data);
  }
}

// ஒரு நிகழ்வை உருவாக்கவும்
const app = new MyApp();

// நிகழ்வு கேட்போர்களைப் பதிவு செய்யவும்
app.on('large-data', (data) => {
  console.log(`பெரிய தரவு கண்டறியப்பட்டது: ${data.length} பைட்டுகள்`);
});

app.on('small-data', (data) => {
  console.log(`சிறிய தரவு கண்டறியப்பட்டது: ${data.length} பைட்டுகள்`);
});

app.on('processed', (data) => {
  console.log('செயலாக்கம் முடிந்தது');
});

// பயன்பாட்டைப் பயன்படுத்தவும்
app.process('Hello');
app.process('Hello, this is a longer string of data');

அசிங்க்ரோனஸ் vs. ஒத்திசைவு

EventEmitter அனைத்து கேட்போர்களையும் அவை பதிவுசெய்யப்பட்ட வரிசையில் ஒத்திசைவாக அழைக்கிறது. எதிர்பார்க்கப்படும் இயக்க வரிசையை பராமரிப்பதற்கு முக்கியமானது:

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// கேட்போரைப் பதிவு செய்யவும்
myEmitter.on('event', () => {
  console.log('கேட்போர் இயக்கப்பட்டது');
});

// நிகழ்வை வெளியிடவும்
console.log('வெளியீட்டிற்கு முன்');
myEmitter.emit('event');
console.log('வெளியீட்டிற்குப் பிறகு');

// வெளியீடு:
// வெளியீட்டிற்கு முன்
// கேட்போர் இயக்கப்பட்டது
// வெளியீட்டிற்குப் பிறகு

கேட்போர்களை அசிங்க்ரோனஸாக இயக்க, நீங்கள் setImmediate() அல்லது process.nextTick() பயன்படுத்தலாம்:

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// setImmediate பயன்படுத்தி அசிங்க்ரோனஸ் கேட்போரைப் பதிவு செய்யவும்
myEmitter.on('async-event', () => {
  setImmediate(() => {
    console.log('அசிங்க்ரோனஸ் கேட்போர் இயக்கப்பட்டது');
  });
});

console.log('வெளியீட்டிற்கு முன்');
myEmitter.emit('async-event');
console.log('வெளியீட்டிற்குப் பிறகு');

// வெளியீடு:
// வெளியீட்டிற்கு முன்
// வெளியீட்டிற்குப் பிறகு
// அசிங்க்ரோனஸ் கேட்போர் இயக்கப்பட்டது

வாக்குறுதி ஒருங்கிணைப்பு

நவீன Node.js பதிப்புகளில் EventEmitter வாக்குறுதிகளைக் கையாளலாம் மற்றும் நிராகரிப்புகளைப் பிடிக்கலாம்:

const EventEmitter = require('events');

// நிராகரிப்புகளைப் பிடிக்க இயலுமைப்படுத்தவும் (Node.js 12.16.0+)
const myEmitter = new EventEmitter({ captureRejections: true });

// அல்லது உலகளவில் அமைக்கவும்
// EventEmitter.captureRejections = true;

// வாக்குறுதியை வழங்கும் நிகழ்வு கையாளுதல்
myEmitter.on('async-operation', async () => {
  // இந்த நிராகரிக்கப்பட்ட வாக்குறுதி பிடிக்கப்பட்டு 'error' நிகழ்வாக மாற்றப்படும்
  throw new Error('அசிங்க்ரோனஸ் செயல்பாடு தோல்வியடைந்தது');
});

// பிழை கையாளுதல்
myEmitter.on('error', (err) => {
  console.error('பிடிக்கப்பட்ட பிழை:', err.message);
});

// நிகழ்வைத் தூண்டவும்
myEmitter.emit('async-operation');

நிஜ உலக எடுத்துக்காட்டு: HTTP சேவையகம்

EventEmitter பல Node.js மைய தொகுதிகளை இயக்குகிறது. ஒரு HTTP சேவையகம் நிகழ்வுகளை எவ்வாறு பயன்படுத்துகிறது என்பது இங்கே:

const http = require('http');

// HTTP சேவையகம் ஒரு EventEmitter ஆகும்
const server = http.createServer();

// 'request' நிகழ்வுகளைக் கேளுங்கள்
server.on('request', (request, response) => {
  console.log(`பெறப்பட்டது ${request.method} கோரிக்கை ${request.url}க்கு`);
  response.writeHead(200, { 'Content-Type': 'text/plain' });
  response.end('Hello World\n');
});

// 'connection' நிகழ்வுகளைக் கேளுங்கள்
server.on('connection', (socket) => {
  console.log('புதிய வாடிக்கையாளர் இணைப்பு', socket.remoteAddress);
});

// 'close' நிகழ்வைக் கேளுங்கள்
server.on('close', () => {
  console.log('சேவையகம் மூடப்பட்டது');
});

// போர்ட் 8080 இல் கேளுங்கள்
server.listen(8080, () => {
  console.log('சேவையகம் போர்ட் 8080 இல் கேட்கிறது');
});

// பின்னர், சேவையகத்தை மூடலாம்
// server.close();

பொதுவான முறைகள் மற்றும் சிறந்த நடைமுறைகள்

1. எப்போதும் 'error' நிகழ்வுகளைக் கேளுங்கள்

ஒரு EventEmitter 'error' நிகழ்வை வெளியிட்டு கேட்போர்கள் இல்லை என்றால், Node.js பிழையை வீசி செயல்முறையை கிராஷ் செய்யும். எப்போதும் பிழை கையாளுதலைச் சேர்க்கவும்:

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

// எப்போதும் பிழை கையாளுதலைச் சேர்க்கவும்
myEmitter.on('error', (err) => {
  console.error('பிழை ஏற்பட்டது:', err);
  // பிழையை பொருத்தமாக கையாளவும்
});

2. நினைவக கசிவுகளைத் தடுக்க கேட்போர்களை சுத்தம் செய்யுங்கள்

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

function setupHandler() {
  const handler = () => console.log('நிகழ்வு கையாளப்பட்டது');
  
  // கையாளுதலைச் சேர்க்கவும்
  myEmitter.on('some-event', handler);
  
  // ஒரு சுத்தம் செயல்பாட்டை வழங்கவும்
  return function cleanup() {
    myEmitter.removeListener('some-event', handler);
  };
}

// ஒரு கையாளுதலை அமைக்கவும்
const cleanup = setupHandler();

// பின்னர், தேவையில்லாதபோது
cleanup();

3> நீக்கக்கூடிய கேட்போர்களுக்குப் பெயரிடப்பட்ட செயல்பாடுகளைப் பயன்படுத்தவும்

// மோசமானது - இந்த கேட்போரை பின்னர் நீக்க முடியாது
emitter.on('event', () => console.log('அநாமதேய செயல்பாடு'));

// நல்லது - குறிப்பு மூலம் நீக்கப்படலாம்
function namedHandler() {
  console.log('பெயரிடப்பட்ட செயல்பாடு');
}

emitter.on('event', namedHandler);

// பின்னர்
emitter.removeListener('event', namedHandler);

பயிற்சி

EventEmitter இல் ஒரு முறை மட்டும் இயங்கும் கேட்போரைச் சேர்க்க எந்த முறை பயன்படுத்தப்படுகிறது? தேர்வு செய்யவும்.

on() முறை
✗ தவறு! on() முறை பல முறை இயங்கும் கேட்போர்களைச் சேர்க்கிறது
once() முறை
✓ சரி! once() முறை ஒரு முறை மட்டும் இயங்கும் கேட்போர்களைச் சேர்க்கிறது
addListener() முறை
✗ தவறு! addListener() முறை on()க்கு மாற்றுப் பெயர் மற்றும் பல முறை இயங்கும்
prependListener() முறை
✗ தவறு! prependListener() முறை கேட்போரை தொடக்கத்தில் சேர்க்கிறது ஆனால் பல முறை இயங்கும்