Hi I built a very simple HTTP server and only to do a stress testing on POE module.
Here's how I tested it:
for x in {1..10000}; do
curl xxxxx:12342 --retry-delay 5 --retry 3 -d randombytes$x
done
When I do that I see multiple "Connection Reset" by peer message, so for this 10k connection I lost about 1200 requests in total.
Is there anyway to improve its performance? Tested nginx on the same server, no kernel parameters was changed during that, no connection reset message at all.
EDIT
I already increased max fileno / per user max fileno, the former was fs.file-max = 3246455
, and the latter was 10240
Attached source code:
use strict;
use warnings;
use feature 'say';
use Net::Async::HTTP::Server;
use IO::Async::Loop;
use HTTP::Request;
use HTTP::Response;
use Data::Dumper;
my $loop = IO::Async::Loop->new();
my $httpserver = Net::Async::HTTP::Server->new(
on_request => sub {
my ($self, $req) = @_;
my ($code, $result) = (200, "It works\n");
my $response = HTTP::Response->new ($code);
$response->add_content ($result);
$response->content_type ("application/json");
$response->content_length (length $response->content);
$req->respond($response);
},
);
$loop->add( $httpserver );
$httpserver->listen(
addr => { family => "inet", socktype => "stream", port => 8080 },
on_listen_error => sub { die "Cannot listen - $_[-1]\n" },
);
say 'Listening normally on ', 8080;
$loop->run;