Contenu connexe
Plus de Anatoly Sharifulin
Plus de Anatoly Sharifulin (20)
May POE
- 10. 2.
wheel’ы,
фильтры и
драйвера
- 17. 1. ядро и сессии
POE::Kernel
POE::Session
POE::NFA
- 20. • post SESSION, STATE [ , ARGS ]
• yield STATE [ , ARGS ]
• call SESSION, STATE [ , ARGS ]
• alarm STATE [ , TIME [, ARGS] ] / alarm_*
• delay STATE, DELAY [ , ARGS ] / delay_*
- 23. • _start [ ARGS ]
• _stop
• _parent OLD, NEW
• _child REASON, CHILD [ ,VALUE ]
- 24. use POE;
use POE::Kernel;
use POE::Session;
POE::Session->create(
inline_states => {
_start => sub {
$_[KERNEL]->yield( $_[STATE] );
},
},
)->option( trace => 1 );
POE::Kernel->run;
- 30. use POE qw( Wheel::Run Filter::Line Filter::Stream );
...
my $wheel = POE::Wheel::Run->new(
Program => [ '/usr/sbin/sendmail', '-i', '-t' ],
StdinEvent => 'stdin',
StdinFilter => POE::Filter::Line->new,
StdoutEvent => 'stdout',
StdoutFilter => POE::Filter::Stream->new,
StderrEvent => 'stderr',
StderrFilter => POE::Filter::Stream->new,
ErrorEvent => 'error',
CloseEvent => 'close',
);
$wheel->put( $_[ARG0] );
- 34. use POE::Filter::Reference;
use Data::Dumper;
my $data = [
{ 'name' => 'Perl Today', 'date' => '26.10.2007' },
{ 'name' => 'May Perl', 'date' => '17-18.05.2008' },
];
for (POE::Filter::Reference->new) {
warn Dumper my $put = $_->put($data); # freez
...
warn Dumper $_->get($put); # thaw
}
- 39. • PoCo::Client::TCP / PoCo::Server::TCP
• PoCo::Client::DNS / PoCo::Server::DNS
• PoCo::Server::SMTP / PoCo::Server::POP3
• PoCo::Client::HTTP / PoCo::Server::HTTP
• PoCo::Server::SimpleHTTP
• PoCo::SimpleDBI
• PoCo::Generic
- 44. • PoCo::Client::BerkleyDB / BDB
• PoCo::Client::Memcached
• PoCo::CGI / PoCo::Server::CGI
• POE::Filter::HTTPD::Request /
POE::Filter::HTTPD::Response
- 48. • использовать последнюю версию
• POE::XS::Queue::Array
• не злоупотреблять yield
• помнить: событие может заблокировать
весь процесс
- 50. • POE::Session option(trace => 1)
• sub PoCo::*::DEBUG () { 1 }
• sub POE::Kernel::ASSERT_DEFAULT () { 1 }
• sub POE::Kernel::TRACE_DEFAULT () { 1 }
• POE::Devel::Profiler
- 54. use POE 1.0002;
use POE::XS::Queue::Array;
use POE::Component::Server::SimpleHTTP;
use URI;
our $SERVER = [ 192.168.1.100, 192.168.1.101, ... ];
POE::Component::Server::SimpleHTTP->new(
ALIAS => 'REDIRECTD',
ADDRESS => '192.168.0.1', PORT => 80,
HOSTNAME => 'redirect.server.my',
HANDLERS => [{
DIR => '.*',
SESSION => 'MANAGER',
EVENT => 'got_request'
}]
);
- 55. POE::Session->create( inline_states => {
_start => sub {
$_[KERNEL]->alias_set( 'MANAGER' );
},
got_request => sub {
for ( $_[ARG1] ) {
$_->code ( 303 );
$_->header( Location => 'http://'.$SERVER->[rand
@$SERVER].URI->new( $_[ARG0]->uri )->path );
$_[KERNEL]->post('REDIRECTD' => 'DONE', $_);
},
},
} )->option( trace => 1 );
POE::Kernel->run;
- 59. • libevent / libev / libasync / libsigc++ (C/C++)
• Cocoa (Objective-C)
• Twisted (Python)
• PRADO (PHP5)
• jemula (Java)
• “event loop” (TCL)