NAME
Argon::Client - Client-side connection class for Argon systems
VERSION
version 0.18
SYNOPSIS
use Argon::Client;
use AnyEvent;
my $cv = AnyEvent->condvar;
my $ar = Argon::Client->new(
host => 'some.host.net',
port => 1234,
retry => 1,
opened => $cv,
ready => sub{},
failed => sub{},
closed => sub{},
notify => sub{},
);
$cv->recv;
while (my $task = get_next_task) {
$ar->process($task->class, $task->args, \&task_complete);
}
my $result = $ar->async(sub{ ... });
if ($result eq 'fnord') {
...
}
DESCRIPTION
Provides the client connection to an Argon network.
ATTRIBUTES
host
The hostname of the Argon::Manager serving as the entry point for the Argon network.
port
The port number for the Argon::Manager.
retry
By default, when the network is at capacity, new tasks may be rejected, causing "result" in Argon::Message to croak. If retry is set, the Argon::Client will instead retry the task on a logarithmic backoff timer until the task is accepted by the manager.
opened
A code ref that is triggered when the connection is initially opened.
ready
A code ref that is triggered when the connection has been opened and the client is ready to begin sending tasks.
failed
A code ref that is triggered when the connection fails. The value of $! is passed as an argument.
closed
A code ref that is triggered when the connection to the remote host is closed.
notify
When tasks are created without a callback (see "process" in Argon::Client), the notify callback is used in its place. The Argon::Message reply is passed as an argument.
METHODS
ping
Pings the Argon::Manager and calls the supplied callback with the manager's reply.
$ar->ping(sub{ my $reply = shift; ... });
queue
Queues a task with the Ar manager. Accepts the name of a class accessible to the workers defining a new and run method, an array of arguments to be passed to new, and an optional code ref to be called when the task is complete. If not supplied, the "notify" in Argon::Client method will be called in its place.
$ar->queue('Task::Class', $args_list, sub{
my $reply = shift;
...
});
process
If the Ar workers were started with --allow-eval and if the client process itself has $Argon::ALLOW_EVAL set to a true value, a code ref may be passed in place of a task class. The code ref will be serialized using Data::Dump::Streamer and has limited support for closures.
$ar->process(sub{ ... }, $args_list, sub{
my $reply = shift;
...
});
async
As an alternative to passing a callback or using a default callback, the async method returns a tied scalar that, when accessed, blocks until the result is available. Note that if the task resulted in an error, it is thrown when the async is fetched.
my $async = $ar->async(sub{ ... }, $arg_list);
if ($async eq 'slood') {
...
}
See Argon::Async.
AUTHOR
Jeff Ober <sysread@fastmail.fm>
COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Jeff Ober.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.