NAME
HTTP::Engine - Web Server Gateway Interface and HTTP Server Engine Drivers (Yet Another Catalyst::Engine)
SYNOPSIS
use HTTP::Engine;
my $engine = HTTP::Engine->new(
interface => {
module => 'ServerSimple',
args => {
host => 'localhost',
port => 1978,
},
request_handler => 'main::handle_request',# or CODE ref
},
);
$engine->run;
use Data::Dumper;
sub handle_request {
my $c = shift;
$c->res->body( Dumper($c->req) );
}
CONCEPT RELEASE
Version 0.0.x is a concept release, the internal interface is still fluid. It is mostly based on the code of Catalyst::Engine.
DESCRIPTION
HTTP::Engine is a bare-bones, extensible HTTP engine. It is not a socket binding server.
The purpose of this module is to be an adaptor between various HTTP-based logic layers and the actual implementation of an HTTP server, such as, mod_perl and FastCGI.
Internally, the only thing HTTP::Engine will do is to prepare a HTTP::Engine::Request object for you to handle, and pass to your handler's TBD
method. In turn your TBD
method should return a fully prepared HTTP::Engine::Response object.
HTTP::Engine will handle absorbing the differences between the environment, the I/O, etc. Your application can focus on creating response objects (which is pretty much what your typical webapp is doing)
INTERFACES
Interfaces are the actual environment-dependent components which handles the actual interaction between your clients and the application.
For example, in CGI mode, you can write to STDOUT and expect your clients to see it, but in mod_perl, you may need to use $r->print instead.
Interfaces are the actual layers that does the interaction. HTTP::Engine currently supports the following:
# XXX TODO: Update the list
- HTTP::Engine::Interface::ServerSimple
- HTTP::Engine::Interface::FastCGI
- HTTP::Engine::Interface::CGI
- HTTP::Engine::Interface::Test
-
for test code interface
- HTTP::Engine::Interface::ModPerl
-
experimental
- HTTP::Engine::Interface::Standalone
-
old style
Interfaces can be specified as part of the HTTP::Engine constructor:
my $interface = HTTP::Engine::Interface::FastCGI->new(
handler => ...
);
HTTP::Engine->new(
interface => $interface
)->run();
Or you can let HTTP::Engine instantiate the interface for you:
HTTP::Engine->new(
interface => {
module => 'FastCGI',
args => {
handler => ...
}
}
)->run();
MIDDLEWARES
For all non-core middlewares (consult #codrepos first), use the HTTPEx:: namespace. For example, if you have a plugin module named "HTTPEx::Middleware::Foo", you could load it as
use HTTP::Engine middlewares => [ qw( +HTTPEx::Plugin::Foo ) ];
METHODS
- load_middleware(middleware)
- load_middlewares(qw/ middleware middleware /)
-
Loads the given middleware into the HTTP::Engine.
AUTHOR
Kazuhiro Osawa <ko@yappo.ne.jp>
Daisuke Maki
tokuhirom
nyarla
marcus
hidek
dann
typester (Interface::FCGI)
lopnor
nothingmuch
kan
SEE ALSO
wiki page http://coderepos.org/share/wiki/HTTP%3A%3AEngine
REPOSITORY
svn co http://svn.coderepos.org/share/lang/perl/HTTP-Engine/trunk HTTP-Engine
HTTP::Engine's Subversion repository is hosted at http://coderepos.org/share/. patches and collaborators are welcome.
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.