NAME
Net::Async::HTTP::Server
- serve HTTP with IO::Async
SYNOPSIS
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.
Metrics
Since version 0.11.
This module reports basic metrics about received requests and sent responses via Metrics::Any.
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>