Net-Async-HTTP-Server
view release on metacpan or search on metacpan
lib/Net/Async/HTTP/Server.pm view on Meta::CPAN
use Net::Async::HTTP::Server::Protocol;
use Net::Async::HTTP::Server::Request;
use Metrics::Any 0.05 '$metrics',
strict => 1,
name_prefix => [qw( http server )];
$metrics->make_gauge( requests_in_flight =>
description => "Count of the number of requests received that have not yet been completed",
# no labels
);
$metrics->make_counter( requests =>
description => "Number of HTTP requests received",
labels => [qw( method )],
);
$metrics->make_counter( responses =>
description => "Number of HTTP responses served",
labels => [qw( method code )],
);
$metrics->make_timer( request_duration =>
description => "Duration of time spent processing requests",
# no labels
);
$metrics->make_distribution( response_bytes =>
description => "The size in bytes of responses sent",
units => "bytes",
# no labels
);
=head1 NAME
C<Net::Async::HTTP::Server> - serve HTTP with C<IO::Async>
=head1 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;
=head1 DESCRIPTION
This module allows a program to respond asynchronously to HTTP requests, as
part of a program based on L<IO::Async>. An object in this class listens on a
single port and invokes the C<on_request> callback or subclass method whenever
an HTTP request is received, allowing the program to respond to it.
For accepting HTTP connections via L<PSGI> and L<Plack>, see also
L<Plack::Handler::Net::Async::HTTP::Server>.
=head2 Metrics
I<Since version 0.11.>
This module reports basic metrics about received requests and sent responses
via L<Metrics::Any>.
=cut
=head1 EVENTS
=head2 on_request $req
Invoked when a new HTTP request is received. It will be passed a
L<Net::Async::HTTP::Server::Request> object.
=cut
=head1 PARAMETERS
The following named parameters may be passed to C<new> or C<configure>:
=head2 request_class => STRING
Gives the name of the class that C<make_request> will construct. This is
provided as an alternative to overriding the C<make_request> method, for the
case where no other methods need overriding or other behaviour changed.
=cut
=head1 METHODS
As a small subclass of L<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 L<IO::Async::Listener/listen> method on how to actually
bind the server to a listening socket to make it accept requests.
=cut
sub _init
{
my $self = shift;
my ( $params ) = @_;
( run in 0.488 second using v1.01-cache-2.11-cpan-5a3173703d6 )