NAME
Net::Server::PSGI - basic Net::Server based PSGI HTTP server class
TEST ONE LINER
perl -e 'use base qw(Net::Server::PSGI); main->run(port => 8080, ipv => "*")'
SYNOPSIS
use base qw(Net::Server::PSGI);
__PACKAGE__->run(app => \&my_echo_handler); # will bind IPv4 port 80
sub my_echo_handler {
my $env = shift;
my $txt = qq{<form method="post" action="/bam"><input type="text" name="foo"><input type="submit"></form>\n};
require Data::Dumper;
local $Data::Dumper::Sortkeys = 1;
require CGI::PSGI;
my $form = {};
my $q = CGI::PSGI->new($env);
$form->{$_} = $q->param($_) for $q->param;
$txt .= "<pre>".Data::Dumper->Dump([$env, $form], ['env', 'form'])."</pre>";
return [200, ['Content-type', 'text/html'], [$txt]];
}
DESCRIPTION
Net::Server::PSGI takes Net::Server::HTTP one level farther. It begins with base type MultiType defaulting to Net::Server::Fork. It is easy to change it to any of the other Net::Server flavors by passing server_type => $other_flavor in the server configurtation. The port has also been defaulted to port 80 - but could easily be changed to another through the server configuration. You can also very easily add ssl by including, proto=>"ssl" and provide a SSL_cert_file and SSL_key_file.
If you want a more fully featured PSGI experience, it would be wise to look at the Plack and Starman set of modules.
METHODS
process_request-
This method has been overridden in Net::Server::PSGI - you should not use it while using Net::Server::PSGI. This overridden method parses the environment and sets up request alarms and handles dying failures. It calls process_psgi_request once the request is ready and headers have been parsed.
process_psgi_request-
Used when psgi_enabled is true. During this method, find_psgi_handler will be called to return the appropriate psgi response handler. Once finished, print_psgi_headers and print_psgi_body are used to print out the response. See PSGI.
Typically this method should not be overridden. Instead, an appropriate method for finding the app should be given to find_psgi_handler or app.
find_psgi_handler-
Used to lookup the appropriate PSGI handler. A reference to the already parsed $env hashref is passed. PATH_INFO will be initialized to the full path portion of the URI. SCRIPT_NAME will be initialized to the empty string. This handler should set the appropriate values for SCRIPT_NAME and PATH_INFO depending upon the path matched. A code reference for the handler should be returned. The default find_psgi_handler will call the
appmethod. If that fails a reference to the psgi_echo_handler is returned as the default application.sub find_psgi_handler { my ($self, $env) = @_; if ($env->{'REQUEST_URI'} =~ m{^ /foo \b ($ |/.*$ ) }x) { $env->{'PATH_INFO'} = $1; return \&foo_app; } else { return $self->SUPER::find_psgi_handler($env); } } app-
Return a reference to the application being served. This should be a valid PSGI application. See PSGI. By default it will look at the value of the
appconfiguration option. Theappmethod may also be used to set theappconfiguration option.package MyApp; use base qw(Net::Server::PSGI); sub default_server_type { 'Prefork' } sub my_app { my $env = shift; return [200, ['Content-type', 'text/html'], ["Hello world"]]; } MyApp->run(app => \&my_app); # OR sub app { \&my_app } MyApp->run; # OR my $server = MyApp->new; $server->app(\&my_app); $server->run;
OPTIONS
In addition to the command line arguments of the Net::Server::HTTP base classes you can also set the following options.
- app
-
Should return a coderef of the PSGI application. Is returned by the app method.
AUTHOR
Paul T. Seamons paul@seamons.com
SEE ALSO
Please see also Plack, Starman,
Net::Server::Fork, Net::Server::INET, Net::Server::PreFork, Net::Server::PreForkSimple, Net::Server::MultiType, Net::Server::Single Net::Server::SIG Net::Server::Daemonize Net::Server::Proto Net::Server::HTTP