Что нужно знать о программировании, управляемом событиями, в Node.js

Что нужно знать о программировании, управляемом событиями, в Node.js. Рисунок 1.

При создании любого программного приложения важным решением является выбор правильной модели для вашего кода.

Объектно-ориентированное программирование — хороший выбор для интерактивных приложений, реагирующих на действия пользователя, которые могут происходить в любом порядке. Это более распространенный шаблон для приложений с графическим интерфейсом, чем для программ командной строки или встроенного системного кода.

Что такое событие или событие?

Вы можете думать о событии как о действии или количестве событий, которые код может распознать и на которые отреагировать. Система или пользователь могут инициировать событие, и код всегда регистрирует функцию для его обработки.

Базовым примером события является нажатие кнопки, которое выполняет определенное действие. Действие нажатия кнопки запускает событие, а функция, которая запускается при нажатии кнопки, является прослушивателем или обработчиком событий.

Что такое событийно-ориентированное программирование?

Программирование, управляемое событиями, — это модель программирования, в которой выполнение приложения зависит от происходящих событий, а не от соблюдения строгой последовательности.

Эта модель в основном используется при создании пользовательских интерфейсов и приложений в реальном времени, когда такое событие, как действие пользователя, запускает задачу в системе.

Этот шаблон очень распространен при создании веб-приложений, где прослушиватели событий запускаются, когда пользователь взаимодействует с объектной моделью документа (DOM).

На следующем изображении показано, как происходит программирование, управляемое событиями. Когда происходит событие, канал событий получает его и передает соответствующему прослушивателю событий для обработки:

Что нужно знать о программировании, управляемом событиями, в Node.js. Рисунок 2.

Программирование, управляемое событиями, в Node.js

Цикл событий JavaScript — это фундаментальная концепция, лежащая в основе асинхронной природы среды выполнения Node.js. Архитектура, управляемая событиями, использует встроенный модуль EventEmitter для обеспечения бесперебойного выполнения.

Благодаря программированию, управляемому событиями, Node.js позволяет создавать серверные приложения, которые могут обрабатывать взаимодействие с пользователем, операции ввода-вывода и обработку данных в режиме реального времени. Это происходит неблокирующим образом с целью повышения производительности и более плавного взаимодействия с пользователями.

Реализация событийно-ориентированного программирования в Node.js станет простой задачей, если вы поймете основы определения, запуска и обработки событий.

Класс EventEmitter

С помощью класса EventEmitter в Node.js вы можете создавать собственные события и подключать прослушиватели событий для их обработки. Чтобы использовать этот класс в коде, импортируйте его из модуля событий следующим образом:

// CommonJS const { EventEmitter } = require(“events”) // ES6 импортирует { EventEmitter } из “events”

Этот класс и его функции-члены будут доступны для использования в вашем приложении. Чтобы начать запуск и обработку событий, создайте экземпляр нового экземпляра класса EventEmitter.

Например:

const FoodEvents = новый EventEmitter()

При этом создается новый объект игрока под названием FoodEvents, который может запускать события и регистрировать прослушиватели. Класс EventEmmitter предоставляет три метода для прослушивания события: on, addListener и Once.

Метод on — это самая основная функция для добавления прослушивателя событий, и addListener работает именно таким образом. Оба принимают имя события и функцию обратного вызова в качестве аргументов. Обратный вызов на самом деле является функцией-обработчиком. Вы можете использовать on и addListener взаимозаменяемо.

Вот как вы обрабатываете события, используя метод on:

FoodEvents.on(“cookie_ready”, (data) => { console.log(“Cookie готово к упаковке, данные получены: “, data); })

Используйте addListener как прямую альтернативу on:

FoodEvents.addListener(“cookie_ready”, (data) => { console.log( “Теперь файлы cookie будут упакованы и отправлены, данные получены: “, data ); })

Оба этих примера добавят обратный вызов в массив прослушивателей событий для события cookie_ready. Если вы используете оба, их обратные вызовы будут выполняться по порядку.

Метод Once запускает прослушиватель событий один раз, запуская следующее событие. Затем система удаляет его из массива прослушивателя событий.

Вот как использовать Once для обработки одноразового события:

FoodEvents.once(“cookie_sent”, (data) => { console.log(“Куки отправлены, данные получены: “, data); })

В этом случае отправитель будет прослушивать событие cookie_sent только один раз и удалять обработчик после его запуска.

Не забывайте, что для того, чтобы прослушиватель мог обработать событие, приложение должно в какой-то момент избавиться от этого события. Вот пример кода для запуска события cookie_ready с использованием метода излучения:

functionakeCookie() { console.log(“Печенье выпекается, почти готово.”) setTimeout(() => { FoodEvents.emit(“cookie_ready”, { Flavor: “ванильное печенье” }) }, 3000) }akeCookie( )

Когда вы запустите код, который печатает в консоли сообщение о том, что файл cookie «обрабатывается», подождите 3 секунды и запустите событие cookie_ready, вы получите результат, как показано ниже:

Что нужно знать о программировании, управляемом событиями, в Node.js. Рисунок 3.

Это показывает, как прослушиватели событий запускаются в том порядке, в котором вы их регистрируете.

Класс EventEmitter предоставляет больше методов, в том числе:

  1. RemoveListener: удаляет экземпляр прослушивателя событий из массива прослушивателей событий. Для этой цели также доступен метод off.
  2. prependListener: этот метод также регистрирует прослушиватель событий, но вместо добавления его в конец массива прослушивателей событий он добавляется в начало. Затем он будет запущен раньше любых других прослушивателей событий, которые вы, возможно, зарегистрировали.
  3. prependOnceListener: работает как prependListener, но прослушиватель событий запускается только один раз, как и в случае с Once.
  4. RemoveAllListeners: эта функция удаляет все прослушиватели событий, зарегистрированные для события с конкретным именем, или все прослушиватели событий, если вы не передаете ей аргументы.
  5. Слушатели: возвращает массив прослушивателей событий с именами событий, которые вы передаете ему в качестве аргументов.
  6. eventNames: вы можете использовать эту функцию, чтобы получить полное имя события, зарегистрированное в прослушивателе событий.
  7. setMaxListeners: Node.js по умолчанию воспроизводит оповещение, когда вы регистрируете более 10 прослушивателей для события, чтобы предотвратить утечки памяти. Вы можете настроить это значение по умолчанию, используя setMaxListeners. Вы также можете проверить это значение с помощью getMaxListeners.

Пакет событий предоставляет комплексные функциональные возможности для событийно-ориентированного программирования в Node.js.

Некоторые из лучших методов объектно-ориентированного программирования

  1. Используйте точные описательные имена для событий, чтобы обеспечить чистоту и удобство обслуживания базы кода.
  2. Применяйте хорошую обработку ошибок и ведение журнала, чтобы облегчить отладку.
  3. Избегайте вложения нескольких обратных вызовов при написании прослушивателей событий. Вместо этого используйте обещания JavaScript.
  4. Не создавайте слишком много прослушивателей событий для одного события. Вместо этого рассмотрите возможность разделения событий и объединения их в цепочку.

Выше приведены все, что вам нужно знать о программировании, управляемом событиями, в Node.js. Надеюсь, статья окажется для вас полезной.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *