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 1.259 second using v1.01-cache-2.11-cpan-140bd7fdf52 )