Jump to content

Объектная среда Perl

Объектная среда Perl ( POE ) — это библиотека модулей Perl, написанная на Perl языке программирования Рокко Капуто и др.

Из КПАН:

«Первоначально POE разрабатывался как ядро ​​постоянного объектного сервера и среды выполнения. Он превратился в многозадачную и сетевую среду общего назначения, охватывающую и обеспечивающую согласованный интерфейс для других циклов событий , таких как Event и наборы инструментов Tk и Gtk ».

Архитектура и слои абстракции

[ редактировать ]

POE, объектную среду Perl, можно рассматривать как крошечную модульную операционную систему . Одна или несколько программ или экземпляров POE могут запускаться одновременно и обычно хорошо подходят для совместной многозадачности . Пакет POE состоит из пространств имен и абстракций , которые определяют будущую разработку POE в рамках открытого соглашения в стиле CPAN .

Слой событий

[ редактировать ]

Неформальная архитектура состоит из набора слоев с ядром внизу. Это крошечное ядро ​​представляет собой уровень событий, который работает как основной цикл каждого работающего экземпляра POE. Первый вызов — «диспетчеру событий» — POE::Kernel .

Пространство имен POE::Kernel содержит набор функций, которые подключаются к самому ядру. Эти абстракции цикла созданы на основе стандартизированного интерфейса моста цикла событий POE — POE::Loop . Их можно комбинировать и сопоставлять по мере необходимости для предоставления сервисов во время выполнения и экономичных средств межпроцессного взаимодействия . Базовыми функциями являются POE::Loop::Event , POE::Loop::Poll и POE::Loop::Select . Также доступны POE::Loop::Tk и POE::Loop::Gtk , которые предлагают подключение к другим кольцевым мостам во внешней среде. Если этого недостаточно, абстракция ядра POE::Loop предоставляет многократно используемые обратные вызовы сигналов, обратные вызовы времени или тревоги, обратные вызовы активности дескриптора файла, а также административные функции, такие как инициализация, выполнение и завершение циклов событий.

Существует также структура упаковки более высокого уровня — POE::Macro и утилита отладки для их тестирования, называемая POE::Preprocessor. Эта структура позволила создать POE::Macro::UseBytes .

ПРИМЕЧАНИЕ. Согласно традиции Perl, POE также является движущейся целью.

Всегда проверяйте CPAN , чтобы узнать, какие новые вкусности сообщество поместило в архив. (...и помните девиз Перла: «Есть несколько способов сделать это», согласно Ларри )

Работающее ядро ​​работает через первичные конечные автоматы, созданные на основе другого набора абстракций, управляемых архитектурой POE::Session . POE::Session почти тривиально определяется как отображение событий на функции, методы класса и/или методы объекта, которые их обрабатывают. Объекты POE::Session также содержат пространство хранения, совместно используемое всеми его обработчиками событий, называемое кучей . Как бы вы их ни разрезали, состояния четко идентифицируются и четко определены.

Более функциональный обработчик событий — это подкласс POE::Session, называемый POE::NFA — управляемый событиями недетерминированный конечный автомат ( более умный конечный автомат). Этот обработчик событий переходит из одного строго определенного состояния в другое по мере того, как того требуют события, опросы, выбор пользователя или другие внешние события. Этот конечный автомат инкапсулирует широкий спектр общих управляемых событиями, потоков, позволяя гораздо более точно отслеживать путь выполнения , чем относительно неформальный POE::Session.

Уровень ввода-вывода

[ редактировать ]

Следующее требование ядра — обработчики ввода-вывода, которые существуют на одном уровне ввода-вывода, называемом Wheels . Колеса инициируют действия, обрабатывают возникающие в результате них события низкого уровня и создают события более высокого уровня для сеансов, которые их используют. Колеса, такие как сеансы и циклы, построены из единого набора абстракций POE::Wheel , которые располагаются поверх ядра. В базовом дистрибутиве POE есть семь узкоспециализированных и четко определенных колес:

  • POE::Wheel::Run — Создает дочерние процессы и взаимодействует с ними, используя Pipe(), fork() и иногда exec(). Взаимодействие осуществляется посредством стандартного ввода и вывода ребенка.
  • POE::Wheel::SocketFactory — способ создания клиентских и серверных сокетов без блокировки в ожидании их установления.
  • POE::Wheel::Curses — обработчик неблокирующего ввода из библиотеки текстового интерфейса Curses . На его основе основаны такие компоненты CPAN, как Curses::UI::POE и Term::Visual.
  • POE::Wheel::FollowTail — отслеживает постоянно растущий файл, например журнал или совместный документ, удерживая дескриптор на его хвосте.
  • POE::Wheel::ListenAccept — подмножество POE::Wheel::SocketFactory, используемое для прослушивания существующих сокетов сервера и приема соединений от удаленных клиентов.
  • POE::Wheel::ReadLine — неблокирующий, управляемый событиями аналог Term::ReadLine.
  • POE::Wheel::ReadWrite — высокопроизводительный обработчик файлов NBIO POE для POE, который использует драйверы и фильтры для выполнения буферизованного чтения и записи дескрипторов файлов , которые опираются на следующий уровень — собственную небольшую файловую систему POE.

Слои файла

[ редактировать ]

Драйверы выполняют фактическую работу по чтению и записи дескрипторов файлов. Они построены в соответствии с менее абстрактными определениями, содержащимися в модуле POE::Driver . Основным драйвером, реализованным на момент написания этой статьи, является POE::Driver::SysRW — универсальное средство чтения/записи дескрипторов файлов, разработанное специально для POE::Wheel::ReadWrite.

Следующий уровень, созданный на основе POE::Filter и, вероятно, находящийся в центре внимания большинства специалистов по обфускации Perl (см. POE #POE Humor ниже), — это набор POE::Filter :

"Filters translate between raw streams
and cooked chunks of tasty dada." per `sungo'
  • POE::Filter::Block — анализирует входные данные как блоки фиксированной длины. На выходе он просто передает данные в целости и сохранности.
  • POE::Filter::HTTPD — анализирует входные данные как HTTP-запросы и преобразует их в HTTP::Request объекты . На выходе он принимает объекты HTTP::Response и превращает их во что-то подходящее для отправки веб-клиенту/пользовательскому агенту.
  • POE::Filter::Line — разбирает входящие потоки на строки и превращает исходящие строки в потоки. Раньше он был очень простым, но недавние улучшения добавили интересные функции, такие как автоматическое определение новой строки.
  • POE::Filter::Reference — используется для отправки структур Perl между программами POE или между POE и другими программами Perl. На входной стороне замороженные данные (с помощью Storable, FreezeThaw, YAML или другого механизма сериализации) размораживаются в структурах данных Perl. На выходе ссылки, данные на фильтр, замораживаются. Данные также могут быть сжаты по запросу, если установлен Compress::Zlib.
  • POE::Filter::Stream - ничего не делает. Он просто передает данные без каких-либо изменений.

см. в POE на CPAN. полный список

Компоненты

[ редактировать ]

Несколько более крупных пакетов были написаны на POE согласно документации POE::Component . Это модули, управляемые событиями, многие из которых действуют как маленькие демоны , предоставляющие услуги более крупным пакетам, к которым они принадлежат. Некоторые из них облегчают связь более высокого уровня между модулями, особенно автономными приложениями, которым необходимо оставаться независимыми от основного дистрибутива Perl.

В общем, POE Components — это готовые процедуры высокого уровня, выполняющие конкретные крупные задачи. Несколько примеров:

  • Component::Server::TCP — TCP-сервлет специального назначения.
  • Component::Client::TCP — TCP-клиент с поддержкой POE.
  • POE::Component::IRC — почти полнофункциональный IRC-клиент.
  • POE::Component::Server::IRC — IRC-сервер, совместимый с RFC 2810–RFC 2813 (в разработке)
  • POE::Component::UserBase — сервлет аутентификации пользователя и сохранения данных.
"POE Components tend to be highly reusable libraries that handle tedious tasks,
freeing programmers to focus on more interesting things. 
This should be true for any library, though."
  • Модуль Acme::POE::Knee на CPAN .
  • Несколько глупых расширений аббревиатур в конце книги «Что такое POE».

См. также

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ee1fe42a0e35585b15b3e469c67459da__1717126440
URL1:https://arc.ask3.ru/arc/aa/ee/da/ee1fe42a0e35585b15b3e469c67459da.html
Заголовок, (Title) документа по адресу, URL1:
Perl Object Environment - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)