Кіріспе

Мах нұсқасы Perl Object Environment (POE) – Рокко Капуто және авторлар тобы Perl бағдарламалау тілінде жазылған Perl модульдерінің кітапханасы. CPAN-нан: "POE бастапқыда тұрақты объект сервері мен орындалу ортасының ядросы ретінде әзірленген. Ол Event және Tk және Gtk құралдар жиынтықтары сияқты басқа да оқиға циклдарына біртекті интерфейспен қолдау көрсететін және ұсынатын көп тапсырмалы және желілік аясқа эволюциялады."

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-ға қарағанда орындалу жолын тығыз қадағалауға мүмкіндік береді.

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-нің өзінің кішкентай файлдық жүйесіне сүйенеді.

Күлкі

Acme::POE::Knee модулі CPAN-де орналасқан. "POE дегеніміз не?" бөлімінің соңында бірнеше әдемісіз аббревиатуралардың толық жазылуы келтірілген.