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 )