Кіріспе
Мах нұсқасы Perl Object Environment (POE) – Рокко Капуто және авторлар тобы Perl бағдарламалау тілінде жазылған Perl модульдерінің кітапханасы. CPAN-нан: "POE бастапқыда тұрақты объект сервері мен орындалу ортасының ядросы ретінде әзірленген. Ол Event және Tk және Gtk құралдар жиынтықтары сияқты басқа да оқиға циклдарына біртекті интерфейспен қолдау көрсететін және ұсынатын көп тапсырмалы және желілік аясқа эволюциялады."
The Perl Object Environment (POE) is a library of Perl modules written in the Perl programming language by Rocco Caputo et al. From CPAN:
"POE originally was developed as the core of a persistent object server and runtime environment. It has evolved into a general purpose multitasking and networking framework, encompassing and providing a consistent interface to other event loops such as Event and the Tk and Gtk toolkits."
POE архитектурасы: Абстракцияның қабаттары
POE, Perl Object Environment – бұл шағын модульдік операциялық жүйе ретінде қарастырылуы мүмкін. Бір немесе бірнеше 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-ға қарағанда орындалу жолын тығыз қадағалауға мүмкіндік береді.
The Running Kernel operates through primordial finite state machines constructed from another set of abstractions ruled by the POE::Session architecture. A POE::Session is almost trivially defined as a map of events to the functions, class methods, and/or object methods that handle them. POE::Session objects also contain a storage space shared by all its event handlers, called a heap. Any way you slice them the states are solidly identified and clearly defined. A more featureful event handler is a POE::Session subclass called POE::NFA an event driven Nondeterministic finite automaton (a smarter finite state machine). This event handler moves from one strictly defined state to another as events, polls, user selections, or other external events require. This state machine acts to encapsulate a wide range of generic event driven threads allowing much tighter tracking along the execution path than the relatively informal POE::Session.
I/O қабаты
Ядроның келесі қажеттілігі – бір I/O қабатында болатын кіріс-шығыс басқарушылары, олар Дөңгелектер деп аталады. Дөңгелектер әрекеттерді бастайды, олардың нәтижесінде туындайтын төменгі деңгейлі оқиғаларды өңдейді және оларды пайдаланатын сессиялар үшін жоғары деңгейлі оқиғаларды жасайды. Сессиялар мен циклдар сияқты Дөңгелектер де Ядроның үстіне орналасқан біртекті абстракциялар жиынтығынан – POE::Wheel – құрылады. POE-нің негізгі дистрибутивінде жеті арнайы және анықталған Дөңгелектер бар:
POE::Wheel::Run – құбыр, fork және кейде exec арқылы бала процестерін құрып, олармен өзара әрекеттеседі. Өзара әрекеттесу бала процестің стандартты кіріс және шығысы арқылы жүзеге асырылады. POE::Wheel::SocketFactory – клиенттік және серверлік сокеттерді олардың құрылуын күтпей, бұғаттамай-ақ құру тәсілі. POE::Wheel::Curses – Curses мәтіндік интерфейс кітапханасынан келетін бұғаттамайтын кіріс ағынын басқарады. Curses::UI::POE және Term::Visual сияқты CPAN компоненттері оған сүйенеді. POE::Wheel::FollowTail – журнал немесе бірлескен құжат сияқты үнемі өсіп келе жатқан файлды, оның соңғы бөлігін қадағалап отырып, бақылайды. POE::Wheel::ListenAccept – қолданыстағы серверлік сокеттерді тыңдау және қашықтан келген клиенттерден қосылымдарды қабылдау үшін қолданылатын POE::Wheel::SocketFactory-нің ішкі жиынтығы. POE::Wheel::ReadLine – Term::ReadLine-ге ұқсас, бұғаттамайтын, оқиғаларға негізделген аналог. POE::Wheel::ReadWrite – POE драйверлері мен сүзгілерін пайдаланып, файлдарға буферленген оқу және жазу операцияларын орындайтын POE үшін жоғары өнімді NBIO файл өңдеушісі, ол келесі қабат – POE-нің өзінің кішкентай файлдық жүйесіне сүйенеді.
POE::Wheel::Run Creates and interacts with child processes using pipe , fork , and sometimes exec Interaction is done through the child's standard input and output. POE::Wheel::SocketFactory A way to create client and server sockets without blocking to wait for their establishment. POE::Wheel::Curses A handler for non blocking input from the Curses text interface library. CPAN components such as Curses::UI::POE and Term::Visual build upon it. POE::Wheel::FollowTail Tracks an ever growing file, such as a log or a collaborative document, by keeping a handle on its tail. POE::Wheel::ListenAccept A subset of POE::Wheel::SocketFactory used for listening on existing server sockets and accepting connections from remote clients. POE::Wheel::ReadLine A non blocking, event driven analogue to Term::ReadLine. POE::Wheel::ReadWrite A high performance NBIO file handler for POE that uses POE's drivers and filters to perform buffered read and write on filehandles which draws on the next layer POE's own little file system.
Күлкі
Acme::POE::Knee модулі CPAN-де орналасқан. "POE дегеніміз не?" бөлімінің соңында бірнеше әдемісіз аббревиатуралардың толық жазылуы келтірілген.