NAME
    `Net::Async::HTTP::Server' - serve HTTP with `IO::Async'

SYNOPSIS
     use Net::Async::HTTP::Server;
     use IO::Async::Loop;

     use HTTP::Response;

     my $loop = IO::Async::Loop->new();

     my $httpserver = Net::Async::HTTP::Server->new(
        on_request => sub {
           my $self = shift;
           my ( $req ) = @_;

           my $response = HTTP::Response->new( 200 );
           $response->add_content( "Hello, world!\n" );
           $response->content_type( "text/plain" );
           $response->content_length( length $response->content );

           $req->respond( $response );
        },
     );

     $loop->add( $httpserver );

     $httpserver->listen(
        addr => { family => "inet6", socktype => "stream", port => 8080 },
     )->get

     $loop->run;

DESCRIPTION
    This module allows a program to respond asynchronously to HTTP requests,
    as part of a program based on IO::Async. An object in this class listens
    on a single port and invokes the `on_request' callback or subclass
    method whenever an HTTP request is received, allowing the program to
    respond to it.

    For accepting HTTP connections via PSGI and Plack, see also
    Plack::Handler::Net::Async::HTTP::Server.

EVENTS
  on_request $req
    Invoked when a new HTTP request is received. It will be passed a
    Net::Async::HTTP::Server::Request object.

PARAMETERS
    The following named parameters may be passed to `new' or `configure':

  request_class => STRING
    Gives the name of the class that `make_request' will construct. This is
    provided as an alternative to overriding the `make_request' method, for
    the case where no other methods need overriding or other behaviour
    changed.

METHODS
    As a small subclass of IO::Async::Listener, this class does not provide
    many new methods of its own. The superclass provides useful methods to
    control the basic operation of this server.

    Specifically, see the IO::Async::Listener method on how to actually bind
    the server to a listening socket to make it accept requests.

  make_request
       $request = $server->make_request( @args )

    Invoked by the protocol stream handler to create a new request object
    representing an incoming request. This is provided as a method for
    subclasses to overload, if they wish to represent requests with
    subclasses of the basic request representation.

TODO
    * Don't use HTTP::Message objects as underlying implementation

    * Consider how to do streaming request inbound

    * Lots more testing

AUTHOR
    Paul Evans <leonerd@leonerd.org.uk>

