The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Eidolon::Application - Eidolon application base class.

SYNOPSIS

Example application package (lib/ExampleApp.pm):

    package ExampleApp;
    use base qw/Eidolon::Application/;

    our $VERSION = "0.01";

    1;

CGI application gateway (index.cgi):

    use lib "./lib";
    use ExampleApp;

    my $app = ExampleApp->new;
    $app->start($app->TYPE_CGI);
    $app->handle_request;

DESCRIPTION

The Eidolon::Application class is the base high-level class of a usual Eidolon application. It creates various system objects, reads application configuration and handles user requests.

Should never be used directly, subclass it from your application's main package instead.

Request processing flow

These steps are performed while processing user request. This sequence can be redefined by the ancestor class, but in most cases you won't need to do this.

1. Create system registry

Registry is the system information structure. This step is done first, because other parts of the system depend on the registry. For more information see "Mount points" in Eidolon::Core::Registry and Eidolon::Core::Registry module documentation.

2. Load application configuration

In this step application loads and instantiates the application configuration class. It contains all basic system settings. Application configuration in example application would be stored in lib/ExampleApp/Config.pm. For more information see Eidolon::Core::Config.

3. Accept requests (FastCGI application only)

FastCGI application works like a daemon - it resides in memory, accepting connections from the web server. Whence a new connection is established, the application goes to the next step.

4. Handle request

Actually, all the work is done in this step. First of all, the application creates the Eidolon::Core::CGI object, that is used to process all incoming data. Next, application loads system drivers using the Eidolon::Core::Loader object. The list of required drivers must be specified in the application configuration (note, that you must specify a router driver, otherwise the application will not handle requests properly). Afterwards, the application transfers execution to a router driver, which tries to find the request handler and then calls it.

If an error occurs on this step, the application calls an error handler, that is specified in application configuration (or uses the default one - Eidolon::Error).

After request (or error) handling, a CGI application shuts down, but FastCGI application goes next.

5. Go to step #3 (FastCGI application only!)

When a user request is handled, our daemon-like application is ready to serve another clients without termination, so we save a bit of system resources.

METHODS

new()

Class constructor. Creates an application object.

start($type)

Application initialization. Creates system registry and loads application configuration. $type - application type (see "CONSTANTS" section below).

handle_request()

User request processing. This function parses and routes the request, then it transfers execution to request handler. If any exception occurs during processing, it tries to start application's error handler. If no such handler was found, application dies.

CONSTANTS

TYPE_CGI

CGI application is the default type. It is suitable for low-loaded applications. When this type is used, the web server starts one interpreter instance per user request, so if you issue high CPU usage or high memory load - use the next application type.

TYPE_FCGI

FastCGI application type is suitable for high-loaded applications with a lot of concurrent connections. It's faster than CGI up to 2000%. This type suggests FCGI module to be installed, otherwise application won't work.

SEE ALSO

Eidolon, Eidolon::Debug, Eidolon::Core::Registry, Eidolon::Core::Config, Eidolon::Core::CGI, Eidolon::Core::Loader

LICENSE

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

AUTHOR

Anton Belousov, <abel@cpan.org>

COPYRIGHT

Copyright (c) 2009, Atma 7, http://www.atma7.com