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.

 Prometheus Metrics

    If Net::Prometheus at least version 0.07_001 is also loaded into the
    running perl instance (i.e. not just installed and available, but
    actually loaded) then some integration code will be run which exports
    basic metrics on received requests and send responses. This is largely
    experimental and undocumented for now. It is implemented in
    Net::Async::HTTP::Server::PrometheusCollector.

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 "listen" in 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>

