#!/bin/less # -*- Encoding:utf-8; Mode:text -*- ---- TITLE::POE в быту POE В быту ---- Что же такое POE ? [[PRE: POEtry ... Panel Of Experts ... Parallel Object Executor ... Parcel Out Execution ... Parenthetically Over-Engineered ... Parity Of Evil ... Part Of Elephant ... Particles Of Eternity ... Party On, Ebenezer ... Passed Out from Excitement ... Pathetically Over-Engineered ... Peace On Earth ... Penes Over-Emphasized ... Perfect Orange Eater ... Perfectly Oblique Egg-plant ... Periodically Orbits Earth ... Perl Obfuscation Engine ... Perl Object Environment ... Perl: Objectively Excellent ... Perl Objects for Enterprises ... Perl Objects for Events ... Perl On Extasy ... Perl Operating Environment ... Perl Operator Extravaganza ... Perl Over Easy ... Perl Over Ethernet ... Perl Overdrive Engine ... Perlmud Offers Expansions ... Perpetual Orgone Energy ... Persistent Object Environment ... Persnickity Oblong Erudition ... Phallic Overture Ejaculate ... Philanthropic Organization Enterprises ... Physician Order Entry ... Piece Of Eight ... Pigs, Owls, and Elephants ... Piles Of Eugh ... Pious Object Excelsior ... Plain Old English ... Plastic Orbs Everywhere ... Platonic Object Engine ... Plenty Of Everything ... Plucky Object Engine ... Poe Organizes Everything ... Poe Over Earth ... Point Of Entry ... Polyolester ... Pompous Oversexed Engineers ... Porn Operating Environment ... Porn of Esoterics ... Port of Embarkment ... Portal Of Evil ... Possibly Over-Engineered ... Post-Occupancy Evaluation ... Potatoes Of Eternity ... Potentially Omnipotent Entity ... Pow! Oof! Eek! ... Power Over Ethernet ... Power Operating Environment ... Practical Over Extraction ... Practically Overengineered Environment ... Preponderance of Evidence ... Preserve Our Essences ... Pretty Obelisk, Excavated ... Pretty Obfuscation Engine ... Pretty Obtuse Engine ... Pretty Odd Environment ... Price Of Entity ... Probable Obese Elephant ... Product Of Experts ... Products Of Eccentricity ... Prognosis: Over-Engineered ... Program Office Estimate ... Programming Over Easy ... Proliferation Of Events ... Prolifically Over-Eaten ... Purity Of Essence ... Princess On Ecstasy ... Pissed Off Elephants ... Purveyor Of Everything ... Edgar Allan POE... Perversely Oriented Entities ... Piracy Over Ethernet ... Poe Or Environment ? ... Piece Of Eden ... :PRE]] Perl Object Environment ! ---- HEADER::POE в быту FOOTER::Perl Mongers Moscow Perl - Клей POE - Изолента, шестерёнки и пружинки ---- Ядро [[PRE: POE::Kernel :PRE]] Подключает плагины ---- Очередь [[PRE: POE::Queue :PRE]] Хранит события ---- Циклы [[PRE: POE::Loop :PRE]] Дёргает обработчики ---- Сессии [[PRE: POE::Session :PRE]] [[PRE: POE::Session->heap() :PRE]] Пользовательские обработчики ---- Колёса [[PRE: POE::Wheel :PRE]] Ввод - вывод ---- [[image src="dia1.png" width="760" height="570"]] И это далеко не всё. ---- PoCo = POE::Component ---- Мы любим велосипеды. Теперь изобретать их намного легче. [[image src="wheelbike.png" width="1000" height="318"]] ---- Много уже готово ---- [[EM:POE::Loop:EM]] POE::Loop POE::Loop::Event - Event.pm POE::Loop::Gtk - GTK POE::Loop::Tk - Tk::Event POE::Loop::IO_Poll - IO::Poll POE::Loop::Select - Select(2) POE::Loop::Kqueue - BSD kqueue Сергей Скворцов ---- POE::Component::Client::TCP POE::Component::Client::FTP POE::Component::Client::POP3 POE::Component::Client::HTTP POE::Component::Client::NNTP POE::Component::Client::Ping POE::Component::Client::DNS POE::Component::Jabber::Client::Component POE::Component::Client::SMTP POE::Component::Client::Telnet POE::Component::Client::Rcon - Quake ! ---- POE::Component::Server::DNS POE::Component::Server::NNTP POE::Component::Server::IRC POE::Component::Server::SimpleSMTP POE::Component::Server::POP3 POE::Component::Server::SOAP POE::Component::Server::HTTP ---- Просто берём и склеиваем ---- Мы возьмём POE::Component::Server::HTTP ---- И Склеем Вебчат ---- Две сессии: [[PRE: 1. HTTP server 2. user session & messages :PRE]] ---- Создаём обе сессии и запускаем POE [[image src="init.png" width="921" height="622"]] ---- Сообщение в очереди [[image src="message.png" width="692" height="306"]] ---- Пользовательскую сессию было решено сделать просто хэшом $session={time=>time(),user=>'user'}; ---- Обслуживание Дёргается само раз в пять секунд [[image src="maintenance.png" width="1115" height="306"]] ---- $poe_kernel Это Singleton POE::Kernel Поставить событие в очередь [[PRE: $kernel->post( $session, $event, @event_args ); $kernel->yield( $event, @event_args ); :PRE]] Дёрнуть событие сразу [[PRE: $handler_result = $kernel->call( $session, $event, @event_args ); :PRE]] Отложенное событие [[PRE: $kernel->alarm( $event, $epoch_time, @event_args ); $kernel->delay( $event, $seconds, @event_args ); :PRE]] ---- Одна сессия готова, описывам вторую. ---- Перед действием [[image src="transhandler.png" width="1282" height="466"]] ---- Авторизация [[image src="login.png" width="917" height="265"]] ---- Сообщили колесу что делать Дальше оно само ! select(2) ---- Показ странички [[image src="handler.png" width="776" height="191"]] Пусть TTk за нас отдувается. ---- Собственно то, зачем чат Отправить сообщение [[image src="post.png" width="1110" height="208"]] ---- Намусорил, подотри за собой. [[image src="posthandler.png" width="761" height="111"]] Соединения используются повторно. ---- Чат Работает В сто строк не уложились, Но уложились в 132 + шаблон ---- В следующий раз сделаем Чат клиент. ---- [[PRE:http://poe.perl.org/:PRE]] Учебники Разработка Компоненты ---- [[PRE:http://search.cpan.org/~rcaputo/POE-0.9999/:PRE]] Основной репозиторий ---- Всем большое Спасибо Ivan B. Serezhkin [[PRE:http://ivan.serezhkin.com/pm/1.poe/:PRE]]