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>