The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

AnyEvent::ConnPool

DESCRIPTION

Simple connections pool designed for asynchronous connections

METHODS

new

Returns new pool object

    AnyEvent::ConnPool->new(
        constructor =>  sub {
            return generate_connection();
        },
        check       =>  {
            cb          =>  sub {
                my $connection = shift;
                ...
                if ($connection->conn()->ping()) {
                    return 1;
                }
                return 0;
            },
            interval    =>  10,
        },
        size        =>  5,
        init        =>  1,
    );

constructor => subroutine, which generates connection for pool.

check => pingers, allows to specify methods and interval for connection state validation. check->{cb} => callback, used for ping connection. You should implement this logic by yourself. If you need reconnect, you can just call

    $connection->reconnect();

check->{interval} => interval for the callback.

size => how many connections should be created on pool initialization.

init => initialize connections on pool construction.

init

Initializes pool.

add

Adds connection to the pool.

get

Returns AnyEvent::ConnPool::Unit object from the pool.

    my $unit = $pool->get();
    my $connection = $unit->conn();

NAME

AnyEvent::ConnPool::Unit

DESCRIPTION

Connection unit. Just wrapper around user-specified connection. Required for transactions support.

METHODS

conn

Returns connection from unit object.

lock

Locks current connection. After that connection shouldn't be used in balancing mechanism and never will be returned from pool. To unlock connection you should use unlock method.

    $connection->lock();
unlock

Unlocks connection and returns it to the balancing scheme.

    $connection->unlock();
locked

Returns true if connection is locked.

    if ($connection->locked()) {
        ...
    }