* on the Fri, Mar 23, 2007 at 12:33:07PM -0700, Tom Bombadil wrote:
> We are using perl to call a "webservice" for recipient checking, home
> directories, etc instead of LDAP, or SQL...
>
> The question is: Can we somehow pre-connect once at startup using perl,
> so we avoid the overhead of a new TCP connection on every query?
Make the connection the first time the subroutine is called, and store
it in a global variable. Eg:
#!/usr/bin/perl
use strict;
use warnings;
my $sock;
sub first_sub {
my $sock = get_sock();
# do stuff
}
sub second_sub {
my $sock = get_sock();
# do other stuff
}
sub conn {
unless( defined $sock ){
# Set up your socket here and store in $sock
}
return $sock;
}
Note. The process that delivers the message is often different to the
one that accepts the message so if you're performing webservice lookups
in both the routers and the acl's you're going to make multiple
connections.
Personally I would write a standalone multithreaded daemon for this,
and talk to it using a network connection with ${readsocket} that
way you can maintain your own pool of connections to the web service
that aren't constantly opening and closing, and you can share a cache
between multiple deliveries/mail servers.
*cough* I'm available for contract work ;)
Mike