Що таке подія (event) у контексті Node.js?
1. Що таке подія в Node.js
Подія (event) - це сигнал про те, що щось відбулося (наприклад, прийшли дані, завершилося читання файлу, підключився клієнт тощо).
Node.js побудований навколо подієво-орієнтованої моделі (event-driven architecture), де код реагує на події, а не блокується в очікуванні їх завершення.
2. Механізм подій - EventEmitter
В основі лежить клас EventEmitter із модуля events.
Він дозволяє об'єктам:
- випромінювати події (
emit); - слухати події (
on).
Приклад:
const EventEmitter = require('events');
const emitter = new EventEmitter();
// Підписка на подію
emitter.on('greet', (name) => {
console.log(`Привіт, ${name}!`);
});
// Генерація (emit) події
emitter.emit('greet', 'Тім');Тут:
'greet'- це ім'я події,on- слухач,emit- генерація події,- викликається callback, переданий у
.on().
3. Як це пов'язано з I/O
Node.js використовує події для всіх асинхронних операцій:
- мережеві запити (
http,net), - файлова система (
fs), - потоки (
streams), - таймери (
setTimeout,setInterval).
Наприклад:
const fs = require('fs');
const stream = fs.createReadStream('file.txt');
stream.on('data', chunk => console.log('Отримано chunk'));
stream.on('end', () => console.log('Файл прочитано'));Тут:
- потік генерує події (
data,end,error), - і ти реагуєш на них, а не чекаєш синхронного завершення.
4. Роль Event Loop
Усі події обробляються через Event Loop - це "двигун", який:
- слухає чергу подій;
- викликає зареєстровані callback-и, коли подія відбувається;
- ніколи не блокується (усе неблокуюче).
Приклад життєвого циклу:
[Вхідні дані] → генерується подія → callback → обробка → наступний цикл5. Де зустрічаються події
| Об'єкт | Типові події |
|---|---|
fs.ReadStream | data, end, error, close |
http.Server | request, connection, close |
net.Socket | connect, data, end, error |
process | exit, uncaughtException, SIGINT |
EventEmitter | будь-які користувацькі ('ready', 'updated' тощо) |
6. Чому подієва модель ефективна
- Асинхронність без блокувань: потік не чекає - події викликаються, коли готовий результат.
- Висока масштабованість: можна обслуговувати тисячі з'єднань в одному потоці.
- Проста логіка реакцій: замість циклу очікування - підписка на події.
Підсумок
Подія (event) у Node.js - це сповіщення про те, що відбулася певна дія.
Вона обробляється через механізм EventEmitter, а її виконання керується Event Loop.
Уся асинхронність Node.js - файлові операції, HTTP, потоки, таймери - будується на подієвій моделі, де код реагує на події, а не чекає їх завершення.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.