Какую модель доставки сообщений использует Node.js?

«Какую модель доставки сообщений использует Node.js?» — вопрос из категории Брокеры сообщений, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Node.js использует event-driven, non-blocking I/O модель, основанную на event loop. Это single-threaded подход, где операции ввода-вывода выполняются асинхронно через callbacks, promises или async/await.

Пример с EventEmitter (паттерн Observer):

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

emitter.on('message', (data) => {
  console.log('Received:', data);
});

emitter.emit('message', 'Hello, Node.js!');

Для работы с потоками (streams) используется backpressure для контроля скорости передачи данных.

Если нужна гарантированная доставка (например, RabbitMQ/Kafka), используют message brokers с подтверждениями (ACKs).

В веб-сокетах (WebSocket) применяется full-duplex связь в реальном времени.