AnyEvent-MPRPC
view release on metacpan or search on metacpan
lib/AnyEvent/MPRPC/Client.pm view on Meta::CPAN
__PACKAGE__->meta->make_immutable;
__END__
=head1 NAME
AnyEvent::MPRPC::Client - Simple TCP-based MessagePack RPC client
=head1 SYNOPSIS
use AnyEvent::MPRPC::Client;
my $client = AnyEvent::MPRPC::Client->new(
host => '127.0.0.1',
port => 4423,
);
# blocking interface
my $res = $client->call( echo => 'foo bar' )->recv; # => 'foo bar';
# non-blocking interface
$client->call( echo => 'foo bar' )->cb(sub {
my $res = $_[0]->recv; # => 'foo bar';
});
=head1 DESCRIPTION
This module is client part of L<AnyEvent::MPRPC>.
=head2 AnyEvent condvars
The main thing you have to remember is that all the data retrieval methods
return an AnyEvent condvar, C<$cv>. If you want the actual data from the
request, there are a few things you can do.
You may have noticed that many of the examples in the SYNOPSIS call C<recv>
on the condvar. You're allowed to do this under 2 circumstances:
=over 4
=item Either you're in a main program,
Main programs are "allowed to call C<recv> blockingly", according to the
author of L<AnyEvent>.
=item or you're in a Coro + AnyEvent environment.
When you call C<recv> inside a coroutine, only that coroutine is blocked
while other coroutines remain active. Thus, the program as a whole is
still responsive.
=back
If you're not using Coro, and you don't want your whole program to block,
what you should do is call C<cb> on the condvar, and give it a coderef to
execute when the results come back. The coderef will be given a condvar
as a parameter, and it can call C<recv> on it to get the data. The final
example in the SYNOPSIS gives a brief example of this.
Also note that C<recv> will throw an exception if the request fails, so be
prepared to catch exceptions where appropriate.
Please read the L<AnyEvent> documentation for more information on the proper
use of condvars.
=head1 METHODS
=head2 new (%options)
Create new client object and return it.
my $client = AnyEvent::MRPPC::Client->new(
host => '127.0.0.1',
port => 4423,
%options,
);
Available options are:
=over 4
=item host => 'Str'
Hostname to connect. (Required)
You should set this option to "unix/" if you will set unix socket to port option.
=item port => 'Int | Str'
Port number or unix socket path to connect. (Required)
=item on_error => $cb->($handle, $fatal, $message)
Error callback code reference, which is called when some error occured.
This has same arguments as L<AnyEvent::Handle>, and also act as handler's on_error callback.
Default is just croak.
=item before_connect => $cb->($self, $filehandle)
It will be called with the file handle in not-yet-connected state as only argument.
=item after_connect => $cb->($self, $filehandle, $host, $port, $retry)
After the connection is established, then this callback will be invoked.
If the connect is unsuccessful, then the on_error callback will be invoked.
=item on_connect => $cb->($self, $filehandle)
It will be called with the file handle in not-yet-connected state as only argument.
*******************************************************************
The on_connect callback is deprecated! Please use before_connect
(same as $prepare_cb of AnyEvent::Socket#tcp_connect) or
after_connect (which call in $connect_cb of
AnyEvent::Socket#tcp_connect).
*******************************************************************
=item handler_options => 'HashRef'
( run in 0.512 second using v1.01-cache-2.11-cpan-39bf76dae61 )