AnyEvent::MP::Kernel - the actual message passing kernel
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
This module implements most of the inner workings of AnyEvent::MP. It offers mostly lower-level functions that deal with network connectivity and special requests.
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.
- snd_to_func $node, $func, @args
Expects a node ID and a name of a function. Asynchronously tries to call this function with the given arguments on that node.
This function can be used to implement
- snd_on $node, @msg
sndwith the given
@msg(which must include the destination port) on the given node.
- eval_on $node, $string[, @reply]
Evaluates the given string as Perl expression on the given node. When @reply is specified, then it is used to construct a reply message with
"$@"and any results from the eval appended.
- $bool = node_is_up $nodeid
Returns true if the given node is "up", that is, the kernel thinks it has a working connection to it.
More precisely, if the node is up, returns
1. If the node is currently connecting or otherwise known but not connected, returns
0. If nothing is known about the node, returns
- @nodes = up_nodes
Return the node IDs of all nodes that are currently connected (excluding the node itself).
- $guard = mon_nodes $callback->($nodeid, $is_up, @reason)
Registers a callback that is called each time a node goes up (a connection is established) or down (the connection is lost).
Node up messages can only be followed by node down messages for the same node, and vice versa.
Note that monitoring a node is usually better done by monitoring its node port. This function is mainly of interest to modules that are concerned about the network topology and low-level connection handling.
Callbacks must not block and should not send any messages.
The function returns an optional guard which can be used to unregister the monitoring callback again.
Example: make sure you call function
newnodefor all nodes that are up or go up (and down).
newnode $_, 1 for up_nodes; mon_nodes \&newnode;
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.
Marc Lehmann <email@example.com> http://home.schmorp.de/