POE-Component-Server-SimpleHTTP-PreFork
view release on metacpan or search on metacpan
t/03_prefork_stream.t view on Meta::CPAN
{
'DIR' => '.*',
'SESSION' => 'HTTP_GET',
'EVENT' => 'GOT_MAIN',
},
],
'FORKHANDLERS' => { 'HTTP_GET' => 'FORKED' },
'MINSPARESERVERS' => 1,
'MAXSPARESERVERS' => 3,
'MAXCLIENTS' => 256,
'STARTSERVERS' => 1,
);
# Create our own session to receive events from SimpleHTTP
POE::Session->create(
inline_states => {
'_start' => sub {
$_[KERNEL]->alias_set( 'HTTP_GET' );
$_[KERNEL]->yield('keepalive');
},
'GOT_MAIN' => \&GOT_MAIN,
'GOT_STREAM' => \&GOT_STREAM,
keepalive => \&keepalive,
'quit' => \&quit,
},
);
POE::Kernel->run;
}
sub GOT_MAIN {
# ARG0 = HTTP::Request object, ARG1 = HTTP::Response object, ARG2 = the DIR that matched
my( $kernel, $heap, $request, $response, $dirmatch ) = @_[KERNEL, HEAP, ARG0 .. ARG2 ];
# Do our stuff to HTTP::Response
$response->code( 200 );
$response->content_type("text/plain");
print "# GOT_MAIN \n";
# sets the response as streamed within our session with the stream event
$response->stream(
session => 'HTTP_GET',
event => 'GOT_STREAM'
);
$heap->{'count'} ||= 0;
# We are done!
$kernel->yield('GOT_STREAM', $response);
}
sub quit {
POE::Kernel->call('HTTPD', 'SHUTDOWN');
exit;
}
sub GOT_STREAM {
my ( $kernel, $heap, $response ) = @_[KERNEL, HEAP, ARG0];
# lets go on streaming ...
if ($heap->{'count'} <= 2) {
my $text = "Hello World ".$heap->{'count'}." \n";
# print "send ".$text."\n";
$response->content($text);
$heap->{'count'}++;
POE::Kernel->post('HTTPD', 'STREAM', $response);
}
else {
POE::Kernel->post('HTTPD', 'CLOSE', $response );
$kernel->delay_set('quit', 1);
}
}
sub keepalive {
$_[KERNEL]->delay_set('keepalive', 1);
}
( run in 1.779 second using v1.01-cache-2.11-cpan-140bd7fdf52 )