ConnCache not been used in LWP::UserAgent

ConnCache not been used in LWP::UserAgent

am 19.04.2006 15:56:46 von amarrero

All,

I'm trying to put together a short script to test a Keep-Alive
connection:

##### CODE BEGINS #####
#!env perl -w
use strict;

use LWP::UserAgent;
use LWP::ConnCache;

my $browser = LWP::UserAgent->new(conn_cache => 1);
$browser->conn_cache(LWP::ConnCache->new());
my @lines = ("mind is a terrible thing to waste\n") x 10;
my $start = time;
my $url = 'http://yourhost/yourpath';
my $count = 0;

foreach (@lines) {
my $response = $browser->post( $url,
[ 'pos' => $count,
'block' => $_,
],
'Content_Type' => 'form-data',
);

$count += length $_;
}


print time() - $start;
print " secs\n";

##### CODE ENDS #####

I noticed that when the request is made the HTTP headers don't
include "Connection: Keep-Alive". It does include "Connection: TE".

Reading the UserAgent.pm source code I noticed that the connection
cache is stored in $self->{conn_cache} but that value is never used
in the module. May be is used by reference in other places by
passing $self.

The point is that the client is opening connections for every request.

/amn

Re: ConnCache not been used in LWP::UserAgent

am 19.04.2006 16:36:40 von amarrero

Mea Culpa. The ConnCache object is been used in LWP::Protocol and its
sub classes. How ever do one have to add the Connection: Keep-Alive
header in the request anyway?

/amn
On Apr 19, 2006, at 9:56 AM, Alexis Marrero wrote:

> All,
>
> I'm trying to put together a short script to test a Keep-Alive
> connection:
>
> ##### CODE BEGINS #####
> #!env perl -w
> use strict;
>
> use LWP::UserAgent;
> use LWP::ConnCache;
>
> my $browser = LWP::UserAgent->new(conn_cache => 1);
> $browser->conn_cache(LWP::ConnCache->new());
> my @lines = ("mind is a terrible thing to waste\n") x 10;
> my $start = time;
> my $url = 'http://yourhost/yourpath';
> my $count = 0;
>
> foreach (@lines) {
> my $response = $browser->post( $url,
> [ 'pos' => $count,
> 'block' => $_,
> ],
> 'Content_Type' => 'form-data',
> );
>
> $count += length $_;
> }
>
>
> print time() - $start;
> print " secs\n";
>
> ##### CODE ENDS #####
>
> I noticed that when the request is made the HTTP headers don't
> include "Connection: Keep-Alive". It does include "Connection: TE".
>
> Reading the UserAgent.pm source code I noticed that the connection
> cache is stored in $self->{conn_cache} but that value is never used
> in the module. May be is used by reference in other places by
> passing $self.
>
> The point is that the client is opening connections for every request.
>
> /amn

Re: ConnCache not been used in LWP::UserAgent

am 19.04.2006 17:46:09 von gisle

Alexis Marrero writes:

> I'm trying to put together a short script to test a Keep-Alive
> connection:
>
> ##### CODE BEGINS #####
> #!env perl -w
> use strict;
>
> use LWP::UserAgent;
> use LWP::ConnCache;
>
> my $browser = LWP::UserAgent->new(conn_cache => 1);

This parameter is wrong, but should not really matter as it is
overwritten in the next statement:

> $browser->conn_cache(LWP::ConnCache->new());
> my @lines = ("mind is a terrible thing to waste\n") x 10;
> my $start = time;
> my $url = 'http://yourhost/yourpath';
> my $count = 0;
>
> foreach (@lines) {
> my $response = $browser->post( $url,
> [ 'pos' => $count,
> 'block' => $_,
> ],
> 'Content_Type' => 'form-data',
> );
>
> $count += length $_;
> }
>
>
> print time() - $start;
> print " secs\n";
>
> ##### CODE ENDS #####
>
> I noticed that when the request is made the HTTP headers don't
> include "Connection: Keep-Alive". It does include "Connection: TE".

'Connection: Keep-Alive' is only used when talking to HTTP/1.0
servers. For HTTP/1.1 it shouldn't be used.

> Reading the UserAgent.pm source code I noticed that the connection
> cache is stored in $self->{conn_cache} but that value is never used
> in the module. May be is used by reference in other places by
> passing $self.

Yes. It's picked up directly by LWP/Protocol/http.pm.

> The point is that the client is opening connections for every request.

Does not happen when I test your pogram against my server, so I do
belive LWP does the right thing..

Regards,
Gisle