Acme-Parataxis
view release on metacpan or search on metacpan
t/009_http_tiny.t view on Meta::CPAN
}
sub request {
my ( $self, $method, $url, $args ) = @_;
$args //= {};
my $orig_cb = $args->{data_callback};
my $content = '';
$args->{data_callback} = sub {
my ( $data, $response ) = @_;
# diag 'Progress: Received ' . length($data) . " bytes for $url";
if ($orig_cb) {
return $orig_cb->( $data, $response );
}
$content .= $data;
return 1;
};
my $res = $self->SUPER::request( $method, $url, $args );
$res->{content} = $content unless $orig_cb;
return $res;
}
t/009_http_tiny.t view on Meta::CPAN
my $client = $listener->accept();
next unless $client;
$client->blocking(0);
# SPAWN a new fiber per connection for true concurrency
Acme::Parataxis->spawn(
sub {
# Drain the request headers from client
my $buffer = '';
while (1) {
my $bytes = sysread( $client, $buffer, 4096, length($buffer) );
last if $buffer =~ /\r?\n\r?\n/; # End of headers
if ( !defined $bytes ) {
last if $! != POSIX::EAGAIN && $! != POSIX::EWOULDBLOCK;
Acme::Parataxis->await_read( $client, 100 );
}
last if defined $bytes && $bytes == 0; # EOF
}
#
my $response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 2\r\nConnection: close\r\n\r\nHI";
my $offset = 0;
my $len = length($response);
while ( $offset < $len ) {
my $written = syswrite( $client, $response, $len - $offset, $offset );
if ( defined $written ) {
$offset += $written;
}
elsif ( $! != POSIX::EAGAIN && $! != POSIX::EWOULDBLOCK ) {
last;
}
else {
Acme::Parataxis->await_write( $client, 100 );
t/015_http_mock_pool.t view on Meta::CPAN
Acme::Parataxis->await_read( $listener, 1000 );
while ( my $client = $listener->accept() ) {
$client->blocking(0);
my $response = "HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 2
Connection: close
HI";
my $offset = 0;
my $len = length($response);
while ( $offset < $len ) {
Acme::Parataxis->await_write( $client, 1000 );
my $written = syswrite( $client, $response, $len - $offset, $offset );
if ( defined $written ) {
$offset += $written;
}
elsif ( $! != POSIX::EAGAIN && $! != POSIX::EWOULDBLOCK ) {
last;
}
}
( run in 0.535 second using v1.01-cache-2.11-cpan-140bd7fdf52 )