Perlbal Classes -- a brief introduction/overview.

Socket -- descends from Danga::Socket
  Adds on to the base class to provide some functionality specifically
useful for creating HTTP sockets.

TCPListener -- descends from Perlbal::Socket
  Very lightweight and fast connection accept class.  Takes incoming
connections as fast as possible and passes them off, instantiating one of
the various Client* classes to handle it.

BackendHTTP -- descends from Perlbal::Socket
  This class handles connections to the backend web nodes for getting data
back to the user.  This class is used by other classes such as ClientProxy
to send a request to an internal node.

HTTPHeaders --
  Header management.  Parses headers (request and response) and stores data
for further user.  Also manages validation of the request line so that it
conforms to HTTP specifications.

ClientHTTPBase -- descends from Perlbal::Socket
  Provides base functionality to ClientHTTP and ClientProxy.  Notably, the
ability to efficiently send files to the remote user.  Also handles most of
the state logic for statistics and such. Is also used for services of type
"selector".  The ClientHTTPBase then reads in the request headers, and asks
the service to re-bless the client instance to a more specific type, for
either a ClientProxy or ClientHTTP (depending on selector's mapping).

ClientHTTP -- descends from Perlbal::ClientHTTPBase
  Very simple and lightweight class.  Handles sending files to the user
without much overhead.  Most of the functionality is contained in the parent
class, and this class doesn't implement much new stuff.

ClientProxy -- descends from Perlbal::ClientHTTPBase
  Takes an incoming connection from a user and connects to a backend node
(BackendHTTP) and relays the request.  The backend can then either tell the
proxy to reproxy and load a file from disk, or return a file directly, or
just return a status message.

ClientManage -- descends from Perlbal::Socket
  Simple interface that provides a way for users to use the management
interface of Perlbal.  You can connect to the management port (as defined
in the config file) with a web browser or regular telnet.

Service --
  A service is a particular item that Perlbal is doing.  Services can have
a role which defines how they behave.  Each service can also have a bunch
of parameters set to further adjust its behavior.  By itself, the Service
class handles maintaining pools of backend connections and managing statistics
about itself.

StatsListener -- descends from Perlbal::Socket
  This class listens for UDP broadcasts from the web nodes describing how
many available children they have.  This information is then used to pick an
endpoint for a backend connection to be made to in order to handle a user's
incoming request.



                            {{ INTERNET }}
                                  |
                                  v
              [Service]<===>[TCPListener]
                          ___/    |    \___
                         v        v        v
             [ClientManage]  [ClientHTTP] [ClientProxy]
                                                ^
                                                |
                                                v
                                          [BackendHTTP]

So connections come in from wherever and get to the TCPListener.  It uses
Service objects to determine what kind of Client* to spawn.  The Client
classes then handle crafting the response for the user.
