AnyEvent-MP
view release on metacpan or search on metacpan
compatible to versions <2 - you have to upgrade all nodes.
- INCOMPATIBLE CHANGE: many APIs have changed, see the section
"PORTING FROM VERSION 1" in the AnyEvent::MP manpage for details.
- AnyEvent::MP::Global is now optional - only seed nodes autoload it
and create a fully-meshed network with each other, normal nodes only
have to connect to seed nodes, other connections are on-demand.
- remove md6 auth algorithms (and use algorithms based on SHA3 instead).
- implement CBOR framing and make it the preferred format.
- new "norc" and "force" options for MP::configure to ignore
or override the rc file.
- a shitload of minor and major fixes all reported and debugged
by Felix Ostmann.
- move seed code to Kernel.
- non-json receive framing was probably broken.
- fixed small typo in MP::Transport.
- fix (unused) provider-kv (version sometimes missing).
- reduce the default export list of MP::Kernel.
- reduced various random delays to zero, as they
are hopefully no longer needed with the new global
protocol.
- implement a secure mode that can suppress (some) code execution
=item * Erlang uses unprotected connections, AEMP uses secure
authentication and can use TLS.
AEMP can use a proven protocol - TLS - to protect connections and
securely authenticate nodes.
=item * The AEMP protocol is optimised for both text-based and binary
communications.
The AEMP protocol, unlike the Erlang protocol, supports both programming
language independent text-only protocols (good for debugging), and binary,
language-specific serialisers (e.g. Storable). By default, unless TLS is
used, the protocol is actually completely text-based.
It has also been carefully designed to be implementable in other languages
with a minimum of work while gracefully degrading functionality to make the
protocol simple.
=item * AEMP has more flexible monitoring options than Erlang.
In Erlang, you can chose to receive I<all> exit signals as messages or
MP/Intro.pod view on Meta::CPAN
Sometimes things go wrong, and AnyEvent::MP, being a professional module,
does not gratuitously spill out messages to your screen.
To help troubleshooting any issues, there are two environment variables
that you can set. The first, C<AE_VERBOSE> sets the logging level of
L<AnyEvent::Log>, which AnyEvent::MP uses. The default is C<4>, which
means nothing much is printed. You can increase it to C<8> or C<9> to get
more verbose output. This is example output when starting a node (somewhat
abridged to get shorter lines):
2012-03-22 01:41:43.59 debug AE::Util: using Guard module to implement guards.
2012-03-22 01:41:43.62 debug AE::MP::Kernel: node cerebro/slwK2LEq7O starting up.
2012-03-22 01:41:43.62 debug AE::MP::Kernel: node listens on [10.0.0.1:52110].
2012-03-22 01:41:43.62 trace AE::MP::Kernel: trying connect to seed node 10.0.0.19:4040.
2012-03-22 01:41:43.66 trace AE::MP::Transport: 10.0.0.19:4040 connected as rain.
2012-03-22 01:41:43.66 info AE::MP::Kernel: rain is up.
A lot of info, but at least you can see that it does something. To only
get info about AnyEvent::MP, you can use C<AE_LOG=AnyEvent::MP=+log> in
your environment.
The other environment variable that can be useful is
C<AE_MP_TRACE>, which, when set to a true value, will cause
MP/Kernel.pm view on Meta::CPAN
=head1 NAME
AnyEvent::MP::Kernel - the actual message passing kernel
=head1 SYNOPSIS
use AnyEvent::MP::Kernel;
$AnyEvent::MP::Kernel::SRCNODE # contains msg origin node id, for debugging
snd_to_func $node, $func, @args # send msg to function
snd_on $node, @msg # snd message again (relay)
eval_on $node, $string[, @reply] # execute perl code on another node
node_is_up $nodeid # return true if a node is connected
@nodes = up_nodes # return a list of all connected nodes
$guard = mon_nodes $callback->($node, $is_up, @reason) # connections up/downs
=head1 DESCRIPTION
MP/Kernel.pm view on Meta::CPAN
sub delay($) {
push @DELAY_QUEUE, shift;
$DELAY_TIMER ||= AE::timer 0, 0, $delay_run;
}
=item $AnyEvent::MP::Kernel::SRCNODE
During execution of a message callback, this variable contains the node ID
of the origin node.
The main use of this variable is for debugging output - there are probably
very few other cases where you need to know the source node ID.
=cut
sub _inject {
warn "RCV $SRCNODE -> " . eval { JSON::XS->new->encode (\@_) } . "\n" if TRACE && @_;
&{ $PORT{+shift} or return };
}
MP/Kernel.pm view on Meta::CPAN
eval "#line 1 \"(eval configure parameter)\"\n$CONFIG->{eval}";
die "$@" if $@;
}
=back
=head1 LOGGING
AnyEvent::MP::Kernel logs high-level information about the current node,
when nodes go up and down, and most runtime errors. It also logs some
debugging and trace messages about network maintainance, such as seed
connections and global node management.
=head1 SEE ALSO
L<AnyEvent::MP>.
=head1 AUTHOR
Marc Lehmann <schmorp@schmorp.de>
http://home.schmorp.de/
and can use TLS.
AEMP can use a proven protocol - TLS - to protect connections and
securely authenticate nodes.
* The AEMP protocol is optimised for both text-based and binary
communications.
The AEMP protocol, unlike the Erlang protocol, supports both
programming language independent text-only protocols (good for
debugging), and binary, language-specific serialisers (e.g.
Storable). By default, unless TLS is used, the protocol is actually
completely text-based.
It has also been carefully designed to be implementable in other
languages with a minimum of work while gracefully degrading
functionality to make the protocol simple.
* AEMP has more flexible monitoring options than Erlang.
In Erlang, you can chose to receive *all* exit signals as messages
( run in 1.668 second using v1.01-cache-2.11-cpan-49f99fa48dc )