# NAME

Twiggy::Prefork - Preforking AnyEvent HTTP server for PSGI

# SYNOPSIS

    $ plackup -s Twiggy::Prefork -a app.psgi
    

# DESCRIPTION

Twiggy::Prefork is Preforking AnyEvent HTTP server for PSGI based on Twiggy. This server supports,

- Min/Max Request Per Child

    supports Min/Max Request Per Child feature. 

- Superdaemon aware

    Supports [Server::Starter](http://search.cpan.org/perldoc?Server::Starter) for hot deploy and
    graceful restarts.

    To use it, instead of the usual:

        plackup --server Twiggy::Prefork --port 8111 app.psgi

    install [Server::Starter](http://search.cpan.org/perldoc?Server::Starter) and use:

        start_server --port 8111 plackup --server Twiggy::Prefork app.psgi

# OPTIONS

- max\_workers

    number of worker processes (default: 10)

- max\_reqs\_per\_child

    max. number of requests to be handled before a worker process exits (default: 100)

- min\_reqs\_per\_child

    if set, randomizes the number of requests handled by a single worker process between the value and that supplied by --max-reqs-per-child (default: none)

# PSGI extensions

- psgix.exit\_guard

    AnyEvent::CondVar object. You can make graceful stop mechanism with this variable.

        use Coro;
        use AnyEvent;

        my $channel = Coro::Channel->new(100);

        async {
          while(1){
            my $q = $channel->get;
            # works..
            $q[0]->end;
          }
        };

        #psgi app
        sub {
          my $env = shift;
          my $cv = AE::cv;
          async {
            $env->{psgix.exit_guard}->begin; 
            $channel->put([$env->{psgix.exit_guard}]);
            $cv->send;
          };
          return sun {
            my $start_response = shift;
            $cv->cb(sub {
              $start_response->([200,['Content-Type'=>'text/plain'],['OK']]);
            });
          }
        }

    Block Twiggy::Prefork worker process exiting until your jobs done.

# AUTHOR

Masahiro Nagano <kazeburo {at} gmail.com>

Shigeki Morimoto

# SEE ALSO

[Twiggy](http://search.cpan.org/perldoc?Twiggy), [Parallel::Prefork](http://search.cpan.org/perldoc?Parallel::Prefork)

# LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.