ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP.pm
Revision: 1.153
Committed: Sat Nov 2 01:30:49 2019 UTC (4 years, 6 months ago) by root
Branch: MAIN
Changes since 1.152: +4 -5 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3 root 1.89 AnyEvent::MP - erlang-style multi-processing/message-passing framework
4 root 1.1
5     =head1 SYNOPSIS
6    
7     use AnyEvent::MP;
8    
9 root 1.75 $NODE # contains this node's node ID
10     NODE # returns this node's node ID
11 root 1.2
12 root 1.38 $SELF # receiving/own port id in rcv callbacks
13    
14 root 1.48 # initialise the node so it can send/receive messages
15 root 1.72 configure;
16 root 1.48
17 root 1.75 # ports are message destinations
18 root 1.38
19     # sending messages
20 root 1.2 snd $port, type => data...;
21 root 1.38 snd $port, @msg;
22     snd @msg_with_first_element_being_a_port;
23 root 1.2
24 root 1.50 # creating/using ports, the simple way
25 root 1.73 my $simple_port = port { my @msg = @_ };
26 root 1.22
27 root 1.52 # creating/using ports, tagged message matching
28 root 1.38 my $port = port;
29 root 1.73 rcv $port, ping => sub { snd $_[0], "pong" };
30     rcv $port, pong => sub { warn "pong received\n" };
31 root 1.2
32 root 1.48 # create a port on another node
33     my $port = spawn $node, $initfunc, @initdata;
34    
35 root 1.116 # destroy a port again
36 root 1.101 kil $port; # "normal" kill
37     kil $port, my_error => "everything is broken"; # error kill
38    
39 root 1.35 # monitoring
40 root 1.129 mon $port, $cb->(@msg) # callback is invoked on death
41     mon $port, $localport # kill localport on abnormal death
42     mon $port, $localport, @msg # send message on death
43 root 1.35
44 root 1.101 # temporarily execute code in port context
45     peval $port, sub { die "kill the port!" };
46    
47     # execute callbacks in $SELF port context
48     my $timer = AE::timer 1, 0, psub {
49     die "kill the port, delayed";
50     };
51    
52 root 1.143 # distributed database - modification
53     db_set $family => $subkey [=> $value] # add a subkey
54     db_del $family => $subkey... # delete one or more subkeys
55     db_reg $family => $port [=> $value] # register a port
56    
57     # distributed database - queries
58     db_family $family => $cb->(\%familyhash)
59     db_keys $family => $cb->(\@keys)
60     db_values $family => $cb->(\@values)
61    
62     # distributed database - monitoring a family
63     db_mon $family => $cb->(\%familyhash, \@added, \@changed, \@deleted)
64    
65 root 1.1 =head1 DESCRIPTION
66    
67 root 1.2 This module (-family) implements a simple message passing framework.
68    
69     Despite its simplicity, you can securely message other processes running
70 root 1.67 on the same or other hosts, and you can supervise entities remotely.
71 root 1.2
72 root 1.23 For an introduction to this module family, see the L<AnyEvent::MP::Intro>
73 root 1.67 manual page and the examples under F<eg/>.
74 root 1.23
75 root 1.2 =head1 CONCEPTS
76    
77     =over 4
78    
79     =item port
80    
81 root 1.79 Not to be confused with a TCP port, a "port" is something you can send
82     messages to (with the C<snd> function).
83 root 1.29
84 root 1.53 Ports allow you to register C<rcv> handlers that can match all or just
85 root 1.64 some messages. Messages send to ports will not be queued, regardless of
86     anything was listening for them or not.
87 root 1.2
88 root 1.119 Ports are represented by (printable) strings called "port IDs".
89    
90 root 1.67 =item port ID - C<nodeid#portname>
91 root 1.2
92 root 1.123 A port ID is the concatenation of a node ID, a hash-mark (C<#>)
93     as separator, and a port name (a printable string of unspecified
94     format created by AnyEvent::MP).
95 root 1.2
96     =item node
97    
98 root 1.53 A node is a single process containing at least one port - the node port,
99 root 1.67 which enables nodes to manage each other remotely, and to create new
100 root 1.53 ports.
101 root 1.2
102 root 1.67 Nodes are either public (have one or more listening ports) or private
103     (no listening ports). Private nodes cannot talk to other private nodes
104 root 1.119 currently, but all nodes can talk to public nodes.
105    
106     Nodes is represented by (printable) strings called "node IDs".
107 root 1.2
108 root 1.117 =item node ID - C<[A-Za-z0-9_\-.:]*>
109 root 1.2
110 root 1.64 A node ID is a string that uniquely identifies the node within a
111     network. Depending on the configuration used, node IDs can look like a
112     hostname, a hostname and a port, or a random string. AnyEvent::MP itself
113 root 1.119 doesn't interpret node IDs in any way except to uniquely identify a node.
114 root 1.64
115     =item binds - C<ip:port>
116    
117     Nodes can only talk to each other by creating some kind of connection to
118     each other. To do this, nodes should listen on one or more local transport
119 root 1.119 endpoints - binds.
120    
121     Currently, only standard C<ip:port> specifications can be used, which
122     specify TCP ports to listen on. So a bind is basically just a tcp socket
123 root 1.147 in listening mode that accepts connections from other nodes.
124 root 1.64
125 root 1.83 =item seed nodes
126 root 1.64
127 root 1.119 When a node starts, it knows nothing about the network it is in - it
128     needs to connect to at least one other node that is already in the
129     network. These other nodes are called "seed nodes".
130    
131     Seed nodes themselves are not special - they are seed nodes only because
132     some other node I<uses> them as such, but any node can be used as seed
133 root 1.146 node for other nodes, and eahc node can use a different set of seed nodes.
134 root 1.83
135     In addition to discovering the network, seed nodes are also used to
136 root 1.147 maintain the network - all nodes using the same seed node are part of the
137     same network. If a network is split into multiple subnets because e.g. the
138     network link between the parts goes down, then using the same seed nodes
139     for all nodes ensures that eventually the subnets get merged again.
140 root 1.83
141     Seed nodes are expected to be long-running, and at least one seed node
142 root 1.85 should always be available. They should also be relatively responsive - a
143     seed node that blocks for long periods will slow down everybody else.
144 root 1.83
145 root 1.119 For small networks, it's best if every node uses the same set of seed
146     nodes. For large networks, it can be useful to specify "regional" seed
147     nodes for most nodes in an area, and use all seed nodes as seed nodes for
148     each other. What's important is that all seed nodes connections form a
149     complete graph, so that the network cannot split into separate subnets
150     forever.
151    
152     Seed nodes are represented by seed IDs.
153    
154     =item seed IDs - C<host:port>
155 root 1.83
156 root 1.119 Seed IDs are transport endpoint(s) (usually a hostname/IP address and a
157 elmex 1.96 TCP port) of nodes that should be used as seed nodes.
158 root 1.29
159 root 1.119 =item global nodes
160    
161     An AEMP network needs a discovery service - nodes need to know how to
162     connect to other nodes they only know by name. In addition, AEMP offers a
163     distributed "group database", which maps group names to a list of strings
164     - for example, to register worker ports.
165    
166     A network needs at least one global node to work, and allows every node to
167     be a global node.
168    
169     Any node that loads the L<AnyEvent::MP::Global> module becomes a global
170     node and tries to keep connections to all other nodes. So while it can
171     make sense to make every node "global" in small networks, it usually makes
172     sense to only make seed nodes into global nodes in large networks (nodes
173 root 1.146 keep connections to seed nodes and global nodes, so making them the same
174 root 1.119 reduces overhead).
175 root 1.67
176 root 1.2 =back
177    
178 root 1.3 =head1 VARIABLES/FUNCTIONS
179 root 1.2
180     =over 4
181    
182 root 1.1 =cut
183    
184     package AnyEvent::MP;
185    
186 root 1.121 use AnyEvent::MP::Config ();
187 root 1.44 use AnyEvent::MP::Kernel;
188 root 1.144 use AnyEvent::MP::Kernel qw(
189     %NODE %PORT %PORT_DATA $UNIQ $RUNIQ $ID
190     add_node load_func
191    
192     NODE $NODE
193     configure
194     node_of port_is_local
195     snd kil
196     db_set db_del
197     db_mon db_family db_keys db_values
198     );
199 root 1.2
200 root 1.1 use common::sense;
201    
202 root 1.2 use Carp ();
203    
204 root 1.141 use AnyEvent ();
205 root 1.124 use Guard ();
206 root 1.1
207 root 1.2 use base "Exporter";
208    
209 root 1.152 our $VERSION = '2.02'; # also in MP/Config.pm
210 root 1.43
211 root 1.8 our @EXPORT = qw(
212 root 1.72 configure
213 root 1.144
214 root 1.153 NODE $NODE
215 root 1.144 *SELF
216    
217 root 1.153 node_of port_is_local
218    
219     snd kil
220 root 1.144 port rcv mon mon_guard psub peval spawn cal
221 root 1.124 db_set db_del db_reg
222 root 1.128 db_mon db_family db_keys db_values
223 root 1.144
224     after
225 root 1.8 );
226 root 1.2
227 root 1.22 our $SELF;
228    
229     sub _self_die() {
230     my $msg = $@;
231     $msg =~ s/\n+$// unless ref $msg;
232     kil $SELF, die => $msg;
233     }
234    
235     =item $thisnode = NODE / $NODE
236    
237 root 1.67 The C<NODE> function returns, and the C<$NODE> variable contains, the node
238 root 1.64 ID of the node running in the current process. This value is initialised by
239 root 1.72 a call to C<configure>.
240 root 1.22
241 root 1.63 =item $nodeid = node_of $port
242 root 1.22
243 root 1.67 Extracts and returns the node ID from a port ID or a node ID.
244 root 1.34
245 root 1.144 =item $is_local = port_is_local $port
246    
247     Returns true iff the port is a local port.
248    
249 root 1.78 =item configure $profile, key => value...
250    
251 root 1.72 =item configure key => value...
252 root 1.34
253 root 1.64 Before a node can talk to other nodes on the network (i.e. enter
254 root 1.72 "distributed mode") it has to configure itself - the minimum a node needs
255 root 1.64 to know is its own name, and optionally it should know the addresses of
256     some other nodes in the network to discover other nodes.
257 root 1.34
258 root 1.121 This function configures a node - it must be called exactly once (or
259     never) before calling other AnyEvent::MP functions.
260    
261 root 1.108 The key/value pairs are basically the same ones as documented for the
262 root 1.127 F<aemp> command line utility (sans the set/del prefix), with these additions:
263 root 1.121
264     =over 4
265    
266     =item norc => $boolean (default false)
267    
268     If true, then the rc file (e.g. F<~/.perl-anyevent-mp>) will I<not>
269 root 1.145 be consulted - all configuration options must be specified in the
270 root 1.121 C<configure> call.
271 root 1.108
272 root 1.121 =item force => $boolean (default false)
273    
274     IF true, then the values specified in the C<configure> will take
275     precedence over any values configured via the rc file. The default is for
276     the rc file to override any options specified in the program.
277    
278     =back
279 root 1.34
280 root 1.72 =over 4
281    
282     =item step 1, gathering configuration from profiles
283    
284     The function first looks up a profile in the aemp configuration (see the
285     L<aemp> commandline utility). The profile name can be specified via the
286 root 1.78 named C<profile> parameter or can simply be the first parameter). If it is
287     missing, then the nodename (F<uname -n>) will be used as profile name.
288 root 1.34
289 root 1.72 The profile data is then gathered as follows:
290 root 1.69
291 elmex 1.77 First, all remaining key => value pairs (all of which are conveniently
292 root 1.72 undocumented at the moment) will be interpreted as configuration
293     data. Then they will be overwritten by any values specified in the global
294     default configuration (see the F<aemp> utility), then the chain of
295     profiles chosen by the profile name (and any C<parent> attributes).
296    
297     That means that the values specified in the profile have highest priority
298     and the values specified directly via C<configure> have lowest priority,
299     and can only be used to specify defaults.
300 root 1.49
301 root 1.64 If the profile specifies a node ID, then this will become the node ID of
302 root 1.122 this process. If not, then the profile name will be used as node ID, with
303 root 1.126 a unique randoms tring (C</%u>) appended.
304 root 1.122
305 root 1.126 The node ID can contain some C<%> sequences that are expanded: C<%n>
306     is expanded to the local nodename, C<%u> is replaced by a random
307     strign to make the node unique. For example, the F<aemp> commandline
308     utility uses C<aemp/%n/%u> as nodename, which might expand to
309     C<aemp/cerebro/ZQDGSIkRhEZQDGSIkRhE>.
310 root 1.64
311 root 1.72 =item step 2, bind listener sockets
312    
313 root 1.64 The next step is to look up the binds in the profile, followed by binding
314     aemp protocol listeners on all binds specified (it is possible and valid
315 root 1.148 to have no binds, meaning that the node cannot be contacted from the
316 root 1.64 outside. This means the node cannot talk to other nodes that also have no
317     binds, but it can still talk to all "normal" nodes).
318    
319 root 1.70 If the profile does not specify a binds list, then a default of C<*> is
320 root 1.72 used, meaning the node will bind on a dynamically-assigned port on every
321     local IP address it finds.
322    
323     =item step 3, connect to seed nodes
324 root 1.64
325 root 1.119 As the last step, the seed ID list from the profile is passed to the
326 root 1.64 L<AnyEvent::MP::Global> module, which will then use it to keep
327 root 1.72 connectivity with at least one node at any point in time.
328 root 1.64
329 root 1.72 =back
330    
331 root 1.87 Example: become a distributed node using the local node name as profile.
332 root 1.72 This should be the most common form of invocation for "daemon"-type nodes.
333 root 1.34
334 root 1.72 configure
335 root 1.34
336 root 1.126 Example: become a semi-anonymous node. This form is often used for
337     commandline clients.
338 root 1.34
339 root 1.126 configure nodeid => "myscript/%n/%u";
340 root 1.72
341 root 1.120 Example: configure a node using a profile called seed, which is suitable
342 root 1.72 for a seed node as it binds on all local addresses on a fixed port (4040,
343     customary for aemp).
344    
345     # use the aemp commandline utility
346 root 1.122 # aemp profile seed binds '*:4040'
347 root 1.72
348     # then use it
349     configure profile => "seed";
350 root 1.34
351 root 1.72 # or simply use aemp from the shell again:
352     # aemp run profile seed
353 root 1.34
354 root 1.72 # or provide a nicer-to-remember nodeid
355     # aemp run profile seed nodeid "$(hostname)"
356 root 1.34
357 root 1.22 =item $SELF
358    
359     Contains the current port id while executing C<rcv> callbacks or C<psub>
360     blocks.
361 root 1.3
362 root 1.67 =item *SELF, SELF, %SELF, @SELF...
363 root 1.22
364     Due to some quirks in how perl exports variables, it is impossible to
365 root 1.67 just export C<$SELF>, all the symbols named C<SELF> are exported by this
366 root 1.22 module, but only C<$SELF> is currently used.
367 root 1.3
368 root 1.33 =item snd $port, type => @data
369 root 1.3
370 root 1.33 =item snd $port, @msg
371 root 1.3
372 root 1.67 Send the given message to the given port, which can identify either a
373     local or a remote port, and must be a port ID.
374 root 1.8
375 root 1.67 While the message can be almost anything, it is highly recommended to
376     use a string as first element (a port ID, or some word that indicates a
377     request type etc.) and to consist if only simple perl values (scalars,
378     arrays, hashes) - if you think you need to pass an object, think again.
379    
380     The message data logically becomes read-only after a call to this
381     function: modifying any argument (or values referenced by them) is
382     forbidden, as there can be considerable time between the call to C<snd>
383     and the time the message is actually being serialised - in fact, it might
384     never be copied as within the same process it is simply handed to the
385     receiving port.
386 root 1.3
387     The type of data you can transfer depends on the transport protocol: when
388     JSON is used, then only strings, numbers and arrays and hashes consisting
389     of those are allowed (no objects). When Storable is used, then anything
390     that Storable can serialise and deserialise is allowed, and for the local
391 root 1.67 node, anything can be passed. Best rely only on the common denominator of
392     these.
393 root 1.3
394 root 1.22 =item $local_port = port
395 root 1.2
396 root 1.50 Create a new local port object and returns its port ID. Initially it has
397     no callbacks set and will throw an error when it receives messages.
398 root 1.10
399 root 1.50 =item $local_port = port { my @msg = @_ }
400 root 1.15
401 root 1.50 Creates a new local port, and returns its ID. Semantically the same as
402     creating a port and calling C<rcv $port, $callback> on it.
403 root 1.15
404 root 1.50 The block will be called for every message received on the port, with the
405     global variable C<$SELF> set to the port ID. Runtime errors will cause the
406     port to be C<kil>ed. The message will be passed as-is, no extra argument
407     (i.e. no port ID) will be passed to the callback.
408 root 1.15
409 root 1.50 If you want to stop/destroy the port, simply C<kil> it:
410 root 1.15
411 root 1.50 my $port = port {
412     my @msg = @_;
413     ...
414     kil $SELF;
415 root 1.15 };
416 root 1.10
417     =cut
418    
419 root 1.33 sub rcv($@);
420    
421 root 1.132 my $KILME = sub {
422 root 1.150 (my $tag = substr $_[0], 0, 30) =~ s/([^\x20-\x7e])/./g;
423 root 1.135 kil $SELF, unhandled_message => "no callback found for message '$tag'";
424 root 1.132 };
425 root 1.50
426 root 1.22 sub port(;&) {
427 root 1.123 my $id = $UNIQ . ++$ID;
428 root 1.22 my $port = "$NODE#$id";
429    
430 root 1.132 rcv $port, shift || $KILME;
431 root 1.10
432 root 1.22 $port
433 root 1.10 }
434    
435 root 1.50 =item rcv $local_port, $callback->(@msg)
436 root 1.31
437 root 1.50 Replaces the default callback on the specified port. There is no way to
438     remove the default callback: use C<sub { }> to disable it, or better
439     C<kil> the port when it is no longer needed.
440 root 1.3
441 root 1.33 The global C<$SELF> (exported by this module) contains C<$port> while
442 root 1.50 executing the callback. Runtime errors during callback execution will
443     result in the port being C<kil>ed.
444 root 1.22
445 root 1.133 The default callback receives all messages not matched by a more specific
446 root 1.50 C<tag> match.
447 root 1.22
448 root 1.50 =item rcv $local_port, tag => $callback->(@msg_without_tag), ...
449 root 1.3
450 root 1.54 Register (or replace) callbacks to be called on messages starting with the
451     given tag on the given port (and return the port), or unregister it (when
452     C<$callback> is C<$undef> or missing). There can only be one callback
453     registered for each tag.
454 root 1.3
455 root 1.50 The original message will be passed to the callback, after the first
456     element (the tag) has been removed. The callback will use the same
457     environment as the default callback (see above).
458 root 1.3
459 root 1.36 Example: create a port and bind receivers on it in one go.
460    
461     my $port = rcv port,
462 root 1.50 msg1 => sub { ... },
463     msg2 => sub { ... },
464 root 1.36 ;
465    
466     Example: create a port, bind receivers and send it in a message elsewhere
467     in one go:
468    
469     snd $otherport, reply =>
470     rcv port,
471 root 1.50 msg1 => sub { ... },
472 root 1.36 ...
473     ;
474    
475 root 1.54 Example: temporarily register a rcv callback for a tag matching some port
476 root 1.102 (e.g. for an rpc reply) and unregister it after a message was received.
477 root 1.54
478     rcv $port, $otherport => sub {
479     my @reply = @_;
480    
481     rcv $SELF, $otherport;
482     };
483    
484 root 1.3 =cut
485    
486     sub rcv($@) {
487 root 1.33 my $port = shift;
488 root 1.75 my ($nodeid, $portid) = split /#/, $port, 2;
489 root 1.3
490 root 1.144 $nodeid eq $NODE
491 root 1.33 or Carp::croak "$port: rcv can only be called on local ports, caught";
492 root 1.22
493 root 1.50 while (@_) {
494     if (ref $_[0]) {
495     if (my $self = $PORT_DATA{$portid}) {
496     "AnyEvent::MP::Port" eq ref $self
497     or Carp::croak "$port: rcv can only be called on message matching ports, caught";
498 root 1.33
499 root 1.103 $self->[0] = shift;
500 root 1.50 } else {
501     my $cb = shift;
502     $PORT{$portid} = sub {
503     local $SELF = $port;
504     eval { &$cb }; _self_die if $@;
505     };
506     }
507     } elsif (defined $_[0]) {
508     my $self = $PORT_DATA{$portid} ||= do {
509 root 1.103 my $self = bless [$PORT{$portid} || sub { }, { }, $port], "AnyEvent::MP::Port";
510 root 1.50
511     $PORT{$portid} = sub {
512     local $SELF = $port;
513    
514     if (my $cb = $self->[1]{$_[0]}) {
515     shift;
516     eval { &$cb }; _self_die if $@;
517     } else {
518     &{ $self->[0] };
519 root 1.33 }
520     };
521 root 1.50
522     $self
523 root 1.33 };
524    
525 root 1.50 "AnyEvent::MP::Port" eq ref $self
526     or Carp::croak "$port: rcv can only be called on message matching ports, caught";
527 root 1.22
528 root 1.50 my ($tag, $cb) = splice @_, 0, 2;
529 root 1.33
530 root 1.50 if (defined $cb) {
531     $self->[1]{$tag} = $cb;
532 root 1.33 } else {
533 root 1.50 delete $self->[1]{$tag};
534 root 1.33 }
535 root 1.22 }
536 root 1.3 }
537 root 1.31
538 root 1.33 $port
539 root 1.2 }
540    
541 root 1.101 =item peval $port, $coderef[, @args]
542    
543 root 1.151 Evaluates the given C<$codref> within the context of C<$port>, that is,
544 root 1.145 when the code throws an exception the C<$port> will be killed.
545 root 1.101
546     Any remaining args will be passed to the callback. Any return values will
547     be returned to the caller.
548    
549     This is useful when you temporarily want to execute code in the context of
550     a port.
551    
552     Example: create a port and run some initialisation code in it's context.
553    
554     my $port = port { ... };
555    
556     peval $port, sub {
557     init
558     or die "unable to init";
559     };
560    
561     =cut
562    
563     sub peval($$) {
564     local $SELF = shift;
565     my $cb = shift;
566    
567     if (wantarray) {
568     my @res = eval { &$cb };
569     _self_die if $@;
570     @res
571     } else {
572     my $res = eval { &$cb };
573     _self_die if $@;
574     $res
575     }
576     }
577    
578 root 1.22 =item $closure = psub { BLOCK }
579 root 1.2
580 root 1.22 Remembers C<$SELF> and creates a closure out of the BLOCK. When the
581     closure is executed, sets up the environment in the same way as in C<rcv>
582     callbacks, i.e. runtime errors will cause the port to get C<kil>ed.
583    
584 root 1.101 The effect is basically as if it returned C<< sub { peval $SELF, sub {
585 root 1.114 BLOCK }, @_ } >>.
586 root 1.101
587 root 1.22 This is useful when you register callbacks from C<rcv> callbacks:
588    
589     rcv delayed_reply => sub {
590     my ($delay, @reply) = @_;
591     my $timer = AE::timer $delay, 0, psub {
592     snd @reply, $SELF;
593     };
594     };
595 root 1.3
596 root 1.8 =cut
597 root 1.3
598 root 1.22 sub psub(&) {
599     my $cb = shift;
600 root 1.3
601 root 1.22 my $port = $SELF
602     or Carp::croak "psub can only be called from within rcv or psub callbacks, not";
603 root 1.1
604 root 1.22 sub {
605     local $SELF = $port;
606 root 1.2
607 root 1.22 if (wantarray) {
608     my @res = eval { &$cb };
609     _self_die if $@;
610     @res
611     } else {
612     my $res = eval { &$cb };
613     _self_die if $@;
614     $res
615     }
616     }
617 root 1.2 }
618    
619 root 1.67 =item $guard = mon $port, $rcvport # kill $rcvport when $port dies
620 root 1.36
621 root 1.67 =item $guard = mon $port # kill $SELF when $port dies
622 root 1.32
623 root 1.139 =item $guard = mon $port, $cb->(@reason) # call $cb when $port dies
624    
625 root 1.67 =item $guard = mon $port, $rcvport, @msg # send a message when $port dies
626 root 1.32
627 root 1.42 Monitor the given port and do something when the port is killed or
628     messages to it were lost, and optionally return a guard that can be used
629     to stop monitoring again.
630    
631 root 1.139 The first two forms distinguish between "normal" and "abnormal" kil's:
632 root 1.32
633 root 1.139 In the first form (another port given), if the C<$port> is C<kil>'ed with
634     a non-empty reason, the other port (C<$rcvport>) will be kil'ed with the
635     same reason. That is, on "normal" kil's nothing happens, while under all
636     other conditions, the other port is killed with the same reason.
637 root 1.32
638 root 1.139 The second form (kill self) is the same as the first form, except that
639 root 1.36 C<$rvport> defaults to C<$SELF>.
640    
641 root 1.139 The remaining forms don't distinguish between "normal" and "abnormal" kil's
642     - it's up to the callback or receiver to check whether the C<@reason> is
643     empty and act accordingly.
644    
645     In the third form (callback), the callback is simply called with any
646     number of C<@reason> elements (empty @reason means that the port was deleted
647     "normally"). Note also that I<< the callback B<must> never die >>, so use
648     C<eval> if unsure.
649    
650     In the last form (message), a message of the form C<$rcvport, @msg,
651     @reason> will be C<snd>.
652 root 1.32
653 root 1.79 Monitoring-actions are one-shot: once messages are lost (and a monitoring
654 root 1.139 alert was raised), they are removed and will not trigger again, even if it
655     turns out that the port is still alive.
656 root 1.79
657 root 1.139 As a rule of thumb, monitoring requests should always monitor a remote
658     port locally (using a local C<$rcvport> or a callback). The reason is that
659     kill messages might get lost, just like any other message. Another less
660     obvious reason is that even monitoring requests can get lost (for example,
661     when the connection to the other node goes down permanently). When
662     monitoring a port locally these problems do not exist.
663 root 1.37
664 root 1.79 C<mon> effectively guarantees that, in the absence of hardware failures,
665     after starting the monitor, either all messages sent to the port will
666     arrive, or the monitoring action will be invoked after possible message
667     loss has been detected. No messages will be lost "in between" (after
668     the first lost message no further messages will be received by the
669     port). After the monitoring action was invoked, further messages might get
670     delivered again.
671    
672     Inter-host-connection timeouts and monitoring depend on the transport
673     used. The only transport currently implemented is TCP, and AnyEvent::MP
674     relies on TCP to detect node-downs (this can take 10-15 minutes on a
675 elmex 1.96 non-idle connection, and usually around two hours for idle connections).
676 root 1.79
677     This means that monitoring is good for program errors and cleaning up
678     stuff eventually, but they are no replacement for a timeout when you need
679     to ensure some maximum latency.
680    
681 root 1.32 Example: call a given callback when C<$port> is killed.
682    
683     mon $port, sub { warn "port died because of <@_>\n" };
684    
685     Example: kill ourselves when C<$port> is killed abnormally.
686    
687 root 1.36 mon $port;
688 root 1.32
689 root 1.36 Example: send us a restart message when another C<$port> is killed.
690 root 1.32
691     mon $port, $self => "restart";
692    
693     =cut
694    
695     sub mon {
696 root 1.75 my ($nodeid, $port) = split /#/, shift, 2;
697 root 1.32
698 root 1.75 my $node = $NODE{$nodeid} || add_node $nodeid;
699 root 1.32
700 root 1.41 my $cb = @_ ? shift : $SELF || Carp::croak 'mon: called with one argument only, but $SELF not set,';
701 root 1.32
702     unless (ref $cb) {
703     if (@_) {
704     # send a kill info message
705 root 1.41 my (@msg) = ($cb, @_);
706 root 1.32 $cb = sub { snd @msg, @_ };
707     } else {
708     # simply kill other port
709     my $port = $cb;
710     $cb = sub { kil $port, @_ if @_ };
711     }
712     }
713    
714     $node->monitor ($port, $cb);
715    
716     defined wantarray
717 root 1.124 and ($cb += 0, Guard::guard { $node->unmonitor ($port, $cb) })
718 root 1.32 }
719    
720     =item $guard = mon_guard $port, $ref, $ref...
721    
722     Monitors the given C<$port> and keeps the passed references. When the port
723     is killed, the references will be freed.
724    
725     Optionally returns a guard that will stop the monitoring.
726    
727     This function is useful when you create e.g. timers or other watchers and
728 root 1.67 want to free them when the port gets killed (note the use of C<psub>):
729 root 1.32
730     $port->rcv (start => sub {
731 root 1.67 my $timer; $timer = mon_guard $port, AE::timer 1, 1, psub {
732 root 1.32 undef $timer if 0.9 < rand;
733     });
734     });
735    
736     =cut
737    
738     sub mon_guard {
739     my ($port, @refs) = @_;
740    
741 root 1.36 #TODO: mon-less form?
742    
743 root 1.32 mon $port, sub { 0 && @refs }
744     }
745    
746 root 1.33 =item kil $port[, @reason]
747 root 1.32
748     Kill the specified port with the given C<@reason>.
749    
750 root 1.107 If no C<@reason> is specified, then the port is killed "normally" -
751     monitor callback will be invoked, but the kil will not cause linked ports
752     (C<mon $mport, $lport> form) to get killed.
753 root 1.32
754 root 1.107 If a C<@reason> is specified, then linked ports (C<mon $mport, $lport>
755     form) get killed with the same reason.
756 root 1.32
757     Runtime errors while evaluating C<rcv> callbacks or inside C<psub> blocks
758     will be reported as reason C<< die => $@ >>.
759    
760     Transport/communication errors are reported as C<< transport_error =>
761     $message >>.
762    
763 root 1.133 Common idioms:
764    
765     # silently remove yourself, do not kill linked ports
766     kil $SELF;
767    
768     # report a failure in some detail
769     kil $SELF, failure_mode_1 => "it failed with too high temperature";
770    
771     # do not waste much time with killing, just die when something goes wrong
772     open my $fh, "<file"
773     or die "file: $!";
774 root 1.38
775     =item $port = spawn $node, $initfunc[, @initdata]
776    
777     Creates a port on the node C<$node> (which can also be a port ID, in which
778     case it's the node where that port resides).
779    
780 root 1.67 The port ID of the newly created port is returned immediately, and it is
781     possible to immediately start sending messages or to monitor the port.
782 root 1.38
783 root 1.67 After the port has been created, the init function is called on the remote
784     node, in the same context as a C<rcv> callback. This function must be a
785     fully-qualified function name (e.g. C<MyApp::Chat::Server::init>). To
786     specify a function in the main program, use C<::name>.
787 root 1.38
788     If the function doesn't exist, then the node tries to C<require>
789     the package, then the package above the package and so on (e.g.
790     C<MyApp::Chat::Server>, C<MyApp::Chat>, C<MyApp>) until the function
791     exists or it runs out of package names.
792    
793     The init function is then called with the newly-created port as context
794 root 1.82 object (C<$SELF>) and the C<@initdata> values as arguments. It I<must>
795     call one of the C<rcv> functions to set callbacks on C<$SELF>, otherwise
796     the port might not get created.
797 root 1.38
798 root 1.67 A common idiom is to pass a local port, immediately monitor the spawned
799     port, and in the remote init function, immediately monitor the passed
800     local port. This two-way monitoring ensures that both ports get cleaned up
801     when there is a problem.
802 root 1.38
803 root 1.80 C<spawn> guarantees that the C<$initfunc> has no visible effects on the
804     caller before C<spawn> returns (by delaying invocation when spawn is
805     called for the local node).
806    
807 root 1.38 Example: spawn a chat server port on C<$othernode>.
808    
809     # this node, executed from within a port context:
810     my $server = spawn $othernode, "MyApp::Chat::Server::connect", $SELF;
811     mon $server;
812    
813     # init function on C<$othernode>
814     sub connect {
815     my ($srcport) = @_;
816    
817     mon $srcport;
818    
819     rcv $SELF, sub {
820     ...
821     };
822     }
823    
824     =cut
825    
826     sub _spawn {
827     my $port = shift;
828     my $init = shift;
829    
830 root 1.82 # rcv will create the actual port
831 root 1.38 local $SELF = "$NODE#$port";
832     eval {
833     &{ load_func $init }
834     };
835     _self_die if $@;
836     }
837    
838     sub spawn(@) {
839 root 1.75 my ($nodeid, undef) = split /#/, shift, 2;
840 root 1.38
841 root 1.123 my $id = $RUNIQ . ++$ID;
842 root 1.38
843 root 1.39 $_[0] =~ /::/
844     or Carp::croak "spawn init function must be a fully-qualified name, caught";
845    
846 root 1.75 snd_to_func $nodeid, "AnyEvent::MP::_spawn" => $id, @_;
847 root 1.38
848 root 1.75 "$nodeid#$id"
849 root 1.38 }
850    
851 root 1.121
852 root 1.59 =item after $timeout, @msg
853    
854     =item after $timeout, $callback
855    
856     Either sends the given message, or call the given callback, after the
857     specified number of seconds.
858    
859 root 1.67 This is simply a utility function that comes in handy at times - the
860     AnyEvent::MP author is not convinced of the wisdom of having it, though,
861     so it may go away in the future.
862 root 1.59
863     =cut
864    
865     sub after($@) {
866     my ($timeout, @action) = @_;
867    
868     my $t; $t = AE::timer $timeout, 0, sub {
869     undef $t;
870     ref $action[0]
871     ? $action[0]()
872     : snd @action;
873     };
874     }
875    
876 root 1.129 #=item $cb2 = timeout $seconds, $cb[, @args]
877    
878 root 1.87 =item cal $port, @msg, $callback[, $timeout]
879    
880     A simple form of RPC - sends a message to the given C<$port> with the
881     given contents (C<@msg>), but adds a reply port to the message.
882    
883     The reply port is created temporarily just for the purpose of receiving
884     the reply, and will be C<kil>ed when no longer needed.
885    
886     A reply message sent to the port is passed to the C<$callback> as-is.
887    
888     If an optional time-out (in seconds) is given and it is not C<undef>,
889     then the callback will be called without any arguments after the time-out
890     elapsed and the port is C<kil>ed.
891    
892 root 1.98 If no time-out is given (or it is C<undef>), then the local port will
893     monitor the remote port instead, so it eventually gets cleaned-up.
894 root 1.87
895     Currently this function returns the temporary port, but this "feature"
896     might go in future versions unless you can make a convincing case that
897     this is indeed useful for something.
898    
899     =cut
900    
901     sub cal(@) {
902     my $timeout = ref $_[-1] ? undef : pop;
903     my $cb = pop;
904    
905     my $port = port {
906     undef $timeout;
907     kil $SELF;
908     &$cb;
909     };
910    
911     if (defined $timeout) {
912     $timeout = AE::timer $timeout, 0, sub {
913     undef $timeout;
914     kil $port;
915     $cb->();
916     };
917     } else {
918     mon $_[0], sub {
919     kil $port;
920     $cb->();
921     };
922     }
923    
924     push @_, $port;
925     &snd;
926    
927     $port
928     }
929    
930 root 1.8 =back
931    
932 root 1.124 =head1 DISTRIBUTED DATABASE
933    
934     AnyEvent::MP comes with a simple distributed database. The database will
935 root 1.131 be mirrored asynchronously on all global nodes. Other nodes bind to one
936     of the global nodes for their needs. Every node has a "local database"
937     which contains all the values that are set locally. All local databases
938     are merged together to form the global database, which can be queried.
939    
940     The database structure is that of a two-level hash - the database hash
941     contains hashes which contain values, similarly to a perl hash of hashes,
942     i.e.:
943 root 1.124
944 root 1.131 $DATABASE{$family}{$subkey} = $value
945 root 1.124
946     The top level hash key is called "family", and the second-level hash key
947 root 1.126 is called "subkey" or simply "key".
948 root 1.124
949 root 1.125 The family must be alphanumeric, i.e. start with a letter and consist
950     of letters, digits, underscores and colons (C<[A-Za-z][A-Za-z0-9_:]*>,
951     pretty much like Perl module names.
952 root 1.124
953 root 1.125 As the family namespace is global, it is recommended to prefix family names
954 root 1.124 with the name of the application or module using it.
955    
956 root 1.126 The subkeys must be non-empty strings, with no further restrictions.
957 root 1.125
958 root 1.124 The values should preferably be strings, but other perl scalars should
959 root 1.131 work as well (such as C<undef>, arrays and hashes).
960 root 1.124
961 root 1.126 Every database entry is owned by one node - adding the same family/subkey
962 root 1.124 combination on multiple nodes will not cause discomfort for AnyEvent::MP,
963     but the result might be nondeterministic, i.e. the key might have
964     different values on different nodes.
965    
966 root 1.126 Different subkeys in the same family can be owned by different nodes
967     without problems, and in fact, this is the common method to create worker
968     pools. For example, a worker port for image scaling might do this:
969 root 1.124
970 root 1.126 db_set my_image_scalers => $port;
971 root 1.124
972 root 1.126 And clients looking for an image scaler will want to get the
973 root 1.129 C<my_image_scalers> keys from time to time:
974    
975     db_keys my_image_scalers => sub {
976     @ports = @{ $_[0] };
977     };
978    
979     Or better yet, they want to monitor the database family, so they always
980     have a reasonable up-to-date copy:
981    
982     db_mon my_image_scalers => sub {
983     @ports = keys %{ $_[0] };
984     };
985    
986     In general, you can set or delete single subkeys, but query and monitor
987     whole families only.
988 root 1.126
989 root 1.129 If you feel the need to monitor or query a single subkey, try giving it
990     it's own family.
991 root 1.126
992     =over
993    
994 root 1.137 =item $guard = db_set $family => $subkey [=> $value]
995 root 1.126
996     Sets (or replaces) a key to the database - if C<$value> is omitted,
997     C<undef> is used instead.
998    
999 root 1.137 When called in non-void context, C<db_set> returns a guard that
1000     automatically calls C<db_del> when it is destroyed.
1001    
1002 root 1.130 =item db_del $family => $subkey...
1003 root 1.124
1004 root 1.130 Deletes one or more subkeys from the database family.
1005 root 1.124
1006 root 1.137 =item $guard = db_reg $family => $port => $value
1007    
1008     =item $guard = db_reg $family => $port
1009    
1010     =item $guard = db_reg $family
1011    
1012     Registers a port in the given family and optionally returns a guard to
1013     remove it.
1014    
1015     This function basically does the same as:
1016 root 1.124
1017 root 1.137 db_set $family => $port => $value
1018    
1019     Except that the port is monitored and automatically removed from the
1020     database family when it is kil'ed.
1021    
1022     If C<$value> is missing, C<undef> is used. If C<$port> is missing, then
1023     C<$SELF> is used.
1024    
1025     This function is most useful to register a port in some port group (which
1026     is just another name for a database family), and have it removed when the
1027     port is gone. This works best when the port is a local port.
1028    
1029     =cut
1030    
1031     sub db_reg($$;$) {
1032     my $family = shift;
1033     my $port = @_ ? shift : $SELF;
1034    
1035     my $clr = sub { db_del $family => $port };
1036     mon $port, $clr;
1037    
1038     db_set $family => $port => $_[0];
1039    
1040     defined wantarray
1041     and &Guard::guard ($clr)
1042     }
1043 root 1.124
1044 root 1.129 =item db_family $family => $cb->(\%familyhash)
1045    
1046     Queries the named database C<$family> and call the callback with the
1047     family represented as a hash. You can keep and freely modify the hash.
1048    
1049     =item db_keys $family => $cb->(\@keys)
1050    
1051     Same as C<db_family>, except it only queries the family I<subkeys> and passes
1052     them as array reference to the callback.
1053    
1054     =item db_values $family => $cb->(\@values)
1055    
1056     Same as C<db_family>, except it only queries the family I<values> and passes them
1057     as array reference to the callback.
1058    
1059 root 1.143 =item $guard = db_mon $family => $cb->(\%familyhash, \@added, \@changed, \@deleted)
1060 root 1.128
1061 root 1.146 Creates a monitor on the given database family. Each time a key is
1062     set or is deleted the callback is called with a hash containing the
1063 root 1.130 database family and three lists of added, changed and deleted subkeys,
1064     respectively. If no keys have changed then the array reference might be
1065     C<undef> or even missing.
1066    
1067 root 1.132 If not called in void context, a guard object is returned that, when
1068     destroyed, stops the monitor.
1069    
1070 root 1.130 The family hash reference and the key arrays belong to AnyEvent::MP and
1071     B<must not be modified or stored> by the callback. When in doubt, make a
1072     copy.
1073    
1074     As soon as possible after the monitoring starts, the callback will be
1075     called with the intiial contents of the family, even if it is empty,
1076     i.e. there will always be a timely call to the callback with the current
1077     contents.
1078 root 1.128
1079     It is possible that the callback is called with a change event even though
1080     the subkey is already present and the value has not changed.
1081    
1082     The monitoring stops when the guard object is destroyed.
1083    
1084     Example: on every change to the family "mygroup", print out all keys.
1085    
1086     my $guard = db_mon mygroup => sub {
1087 root 1.130 my ($family, $a, $c, $d) = @_;
1088 root 1.128 print "mygroup members: ", (join " ", keys %$family), "\n";
1089     };
1090    
1091     Exmaple: wait until the family "My::Module::workers" is non-empty.
1092    
1093     my $guard; $guard = db_mon My::Module::workers => sub {
1094 root 1.130 my ($family, $a, $c, $d) = @_;
1095 root 1.128 return unless %$family;
1096     undef $guard;
1097     print "My::Module::workers now nonempty\n";
1098     };
1099    
1100 root 1.146 Example: print all changes to the family "AnyEvent::Fantasy::Module".
1101 root 1.128
1102 root 1.146 my $guard = db_mon AnyEvent::Fantasy::Module => sub {
1103 root 1.130 my ($family, $a, $c, $d) = @_;
1104 root 1.128
1105 root 1.130 print "+$_=$family->{$_}\n" for @$a;
1106     print "*$_=$family->{$_}\n" for @$c;
1107     print "-$_=$family->{$_}\n" for @$d;
1108 root 1.128 };
1109    
1110 root 1.124 =cut
1111    
1112     =back
1113    
1114 root 1.26 =head1 AnyEvent::MP vs. Distributed Erlang
1115    
1116 root 1.35 AnyEvent::MP got lots of its ideas from distributed Erlang (Erlang node
1117     == aemp node, Erlang process == aemp port), so many of the documents and
1118     programming techniques employed by Erlang apply to AnyEvent::MP. Here is a
1119 root 1.27 sample:
1120    
1121 root 1.95 http://www.erlang.se/doc/programming_rules.shtml
1122     http://erlang.org/doc/getting_started/part_frame.html # chapters 3 and 4
1123     http://erlang.org/download/erlang-book-part1.pdf # chapters 5 and 6
1124     http://erlang.org/download/armstrong_thesis_2003.pdf # chapters 4 and 5
1125 root 1.27
1126     Despite the similarities, there are also some important differences:
1127 root 1.26
1128     =over 4
1129    
1130 root 1.65 =item * Node IDs are arbitrary strings in AEMP.
1131 root 1.26
1132 root 1.65 Erlang relies on special naming and DNS to work everywhere in the same
1133     way. AEMP relies on each node somehow knowing its own address(es) (e.g. by
1134 root 1.99 configuration or DNS), and possibly the addresses of some seed nodes, but
1135     will otherwise discover other nodes (and their IDs) itself.
1136 root 1.27
1137 root 1.54 =item * Erlang has a "remote ports are like local ports" philosophy, AEMP
1138 root 1.51 uses "local ports are like remote ports".
1139    
1140     The failure modes for local ports are quite different (runtime errors
1141     only) then for remote ports - when a local port dies, you I<know> it dies,
1142     when a connection to another node dies, you know nothing about the other
1143     port.
1144    
1145     Erlang pretends remote ports are as reliable as local ports, even when
1146     they are not.
1147    
1148     AEMP encourages a "treat remote ports differently" philosophy, with local
1149     ports being the special case/exception, where transport errors cannot
1150     occur.
1151    
1152 root 1.26 =item * Erlang uses processes and a mailbox, AEMP does not queue.
1153    
1154 root 1.119 Erlang uses processes that selectively receive messages out of order, and
1155     therefore needs a queue. AEMP is event based, queuing messages would serve
1156     no useful purpose. For the same reason the pattern-matching abilities
1157     of AnyEvent::MP are more limited, as there is little need to be able to
1158 elmex 1.77 filter messages without dequeuing them.
1159 root 1.26
1160 root 1.119 This is not a philosophical difference, but simply stems from AnyEvent::MP
1161     being event-based, while Erlang is process-based.
1162    
1163 root 1.146 You can have a look at L<Coro::MP> for a more Erlang-like process model on
1164 root 1.119 top of AEMP and Coro threads.
1165 root 1.26
1166     =item * Erlang sends are synchronous, AEMP sends are asynchronous.
1167    
1168 root 1.119 Sending messages in Erlang is synchronous and blocks the process until
1169 root 1.147 a connection has been established and the message sent (and so does not
1170 root 1.119 need a queue that can overflow). AEMP sends return immediately, connection
1171     establishment is handled in the background.
1172 root 1.26
1173 root 1.51 =item * Erlang suffers from silent message loss, AEMP does not.
1174 root 1.26
1175 root 1.99 Erlang implements few guarantees on messages delivery - messages can get
1176     lost without any of the processes realising it (i.e. you send messages a,
1177     b, and c, and the other side only receives messages a and c).
1178 root 1.26
1179 root 1.117 AEMP guarantees (modulo hardware errors) correct ordering, and the
1180     guarantee that after one message is lost, all following ones sent to the
1181     same port are lost as well, until monitoring raises an error, so there are
1182     no silent "holes" in the message sequence.
1183 root 1.26
1184 root 1.119 If you want your software to be very reliable, you have to cope with
1185     corrupted and even out-of-order messages in both Erlang and AEMP. AEMP
1186     simply tries to work better in common error cases, such as when a network
1187     link goes down.
1188    
1189 root 1.26 =item * Erlang can send messages to the wrong port, AEMP does not.
1190    
1191 root 1.119 In Erlang it is quite likely that a node that restarts reuses an Erlang
1192     process ID known to other nodes for a completely different process,
1193     causing messages destined for that process to end up in an unrelated
1194     process.
1195 root 1.26
1196 root 1.119 AEMP does not reuse port IDs, so old messages or old port IDs floating
1197 root 1.26 around in the network will not be sent to an unrelated port.
1198    
1199     =item * Erlang uses unprotected connections, AEMP uses secure
1200     authentication and can use TLS.
1201    
1202 root 1.66 AEMP can use a proven protocol - TLS - to protect connections and
1203 root 1.26 securely authenticate nodes.
1204    
1205 root 1.28 =item * The AEMP protocol is optimised for both text-based and binary
1206     communications.
1207    
1208 root 1.66 The AEMP protocol, unlike the Erlang protocol, supports both programming
1209 root 1.119 language independent text-only protocols (good for debugging), and binary,
1210 root 1.67 language-specific serialisers (e.g. Storable). By default, unless TLS is
1211     used, the protocol is actually completely text-based.
1212 root 1.28
1213     It has also been carefully designed to be implementable in other languages
1214 root 1.66 with a minimum of work while gracefully degrading functionality to make the
1215 root 1.28 protocol simple.
1216    
1217 root 1.35 =item * AEMP has more flexible monitoring options than Erlang.
1218    
1219 root 1.119 In Erlang, you can chose to receive I<all> exit signals as messages or
1220     I<none>, there is no in-between, so monitoring single Erlang processes is
1221     difficult to implement.
1222    
1223     Monitoring in AEMP is more flexible than in Erlang, as one can choose
1224     between automatic kill, exit message or callback on a per-port basis.
1225 root 1.35
1226 root 1.37 =item * Erlang tries to hide remote/local connections, AEMP does not.
1227 root 1.35
1228 root 1.67 Monitoring in Erlang is not an indicator of process death/crashes, in the
1229     same way as linking is (except linking is unreliable in Erlang).
1230 root 1.37
1231     In AEMP, you don't "look up" registered port names or send to named ports
1232     that might or might not be persistent. Instead, you normally spawn a port
1233 root 1.67 on the remote node. The init function monitors you, and you monitor the
1234     remote port. Since both monitors are local to the node, they are much more
1235     reliable (no need for C<spawn_link>).
1236 root 1.37
1237     This also saves round-trips and avoids sending messages to the wrong port
1238     (hard to do in Erlang).
1239 root 1.35
1240 root 1.26 =back
1241    
1242 root 1.46 =head1 RATIONALE
1243    
1244     =over 4
1245    
1246 root 1.67 =item Why strings for port and node IDs, why not objects?
1247 root 1.46
1248     We considered "objects", but found that the actual number of methods
1249 root 1.67 that can be called are quite low. Since port and node IDs travel over
1250 root 1.46 the network frequently, the serialising/deserialising would add lots of
1251 root 1.67 overhead, as well as having to keep a proxy object everywhere.
1252 root 1.46
1253     Strings can easily be printed, easily serialised etc. and need no special
1254     procedures to be "valid".
1255    
1256 root 1.110 And as a result, a port with just a default receiver consists of a single
1257 root 1.117 code reference stored in a global hash - it can't become much cheaper.
1258 root 1.47
1259 root 1.67 =item Why favour JSON, why not a real serialising format such as Storable?
1260 root 1.46
1261     In fact, any AnyEvent::MP node will happily accept Storable as framing
1262     format, but currently there is no way to make a node use Storable by
1263 root 1.67 default (although all nodes will accept it).
1264 root 1.46
1265     The default framing protocol is JSON because a) JSON::XS is many times
1266     faster for small messages and b) most importantly, after years of
1267     experience we found that object serialisation is causing more problems
1268 root 1.67 than it solves: Just like function calls, objects simply do not travel
1269 root 1.46 easily over the network, mostly because they will always be a copy, so you
1270     always have to re-think your design.
1271    
1272     Keeping your messages simple, concentrating on data structures rather than
1273     objects, will keep your messages clean, tidy and efficient.
1274    
1275     =back
1276    
1277 root 1.137 =head1 PORTING FROM AnyEvent::MP VERSION 1.X
1278    
1279 root 1.139 AEMP version 2 has a few major incompatible changes compared to version 1:
1280 root 1.137
1281     =over 4
1282    
1283     =item AnyEvent::MP::Global no longer has group management functions.
1284    
1285 root 1.140 At least not officially - the grp_* functions are still exported and might
1286     work, but they will be removed in some later release.
1287    
1288 root 1.137 AnyEvent::MP now comes with a distributed database that is more
1289 root 1.139 powerful. Its database families map closely to port groups, but the API
1290     has changed (the functions are also now exported by AnyEvent::MP). Here is
1291     a rough porting guide:
1292 root 1.137
1293     grp_reg $group, $port # old
1294     db_reg $group, $port # new
1295    
1296     $list = grp_get $group # old
1297     db_keys $group, sub { my $list = shift } # new
1298    
1299     grp_mon $group, $cb->(\@ports, $add, $del) # old
1300     db_mon $group, $cb->(\%ports, $add, $change, $del) # new
1301    
1302 root 1.139 C<grp_reg> is a no-brainer (just replace by C<db_reg>), but C<grp_get> is
1303     no longer instant, because the local node might not have a copy of the
1304     group. You can either modify your code to allow for a callback, or use
1305     C<db_mon> to keep an updated copy of the group:
1306 root 1.137
1307     my $local_group_copy;
1308 root 1.139 db_mon $group => sub { $local_group_copy = $_[0] };
1309 root 1.137
1310 root 1.139 # now "keys %$local_group_copy" always returns the most up-to-date
1311 root 1.137 # list of ports in the group.
1312    
1313 root 1.139 C<grp_mon> can be replaced by C<db_mon> with minor changes - C<db_mon>
1314     passes a hash as first argument, and an extra C<$chg> argument that can be
1315     ignored:
1316 root 1.137
1317     db_mon $group => sub {
1318 root 1.149 my ($ports, $add, $chg, $del) = @_;
1319 root 1.137 $ports = [keys %$ports];
1320    
1321     # now $ports, $add and $del are the same as
1322     # were originally passed by grp_mon.
1323     ...
1324     };
1325    
1326     =item Nodes not longer connect to all other nodes.
1327    
1328     In AEMP 1.x, every node automatically loads the L<AnyEvent::MP::Global>
1329     module, which in turn would create connections to all other nodes in the
1330     network (helped by the seed nodes).
1331    
1332     In version 2.x, global nodes still connect to all other global nodes, but
1333     other nodes don't - now every node either is a global node itself, or
1334     attaches itself to another global node.
1335    
1336     If a node isn't a global node itself, then it attaches itself to one
1337     of its seed nodes. If that seed node isn't a global node yet, it will
1338     automatically be upgraded to a global node.
1339    
1340     So in many cases, nothing needs to be changed - one just has to make sure
1341     that all seed nodes are meshed together with the other seed nodes (as with
1342 root 1.139 AEMP 1.x), and other nodes specify them as seed nodes. This is most easily
1343     achieved by specifying the same set of seed nodes for all nodes in the
1344     network.
1345 root 1.137
1346     Not opening a connection to every other node is usually an advantage,
1347     except when you need the lower latency of an already established
1348     connection. To ensure a node establishes a connection to another node,
1349     you can monitor the node port (C<mon $node, ...>), which will attempt to
1350 root 1.138 create the connection (and notify you when the connection fails).
1351 root 1.137
1352 root 1.138 =item Listener-less nodes (nodes without binds) are gone.
1353 root 1.137
1354 root 1.138 And are not coming back, at least not in their old form. If no C<binds>
1355 root 1.139 are specified for a node, AnyEvent::MP assumes a default of C<*:*>.
1356 root 1.137
1357     There are vague plans to implement some form of routing domains, which
1358     might or might not bring back listener-less nodes, but don't count on it.
1359    
1360     The fact that most connections are now optional somewhat mitigates this,
1361     as a node can be effectively unreachable from the outside without any
1362     problems, as long as it isn't a global node and only reaches out to other
1363     nodes (as opposed to being contacted from other nodes).
1364    
1365 root 1.138 =item $AnyEvent::MP::Kernel::WARN has gone.
1366    
1367     AnyEvent has acquired a logging framework (L<AnyEvent::Log>), and AEMP now
1368     uses this, and so should your programs.
1369    
1370     Every module now documents what kinds of messages it generates, with
1371     AnyEvent::MP acting as a catch all.
1372    
1373     On the positive side, this means that instead of setting
1374 root 1.139 C<PERL_ANYEVENT_MP_WARNLEVEL>, you can get away by setting C<AE_VERBOSE> -
1375 root 1.138 much less to type.
1376    
1377 root 1.137 =back
1378    
1379 root 1.139 =head1 LOGGING
1380    
1381 root 1.146 AnyEvent::MP does not normally log anything by itself, but since it is the
1382 root 1.151 root of the context hierarchy for AnyEvent::MP modules, it will receive
1383 root 1.139 all log messages by submodules.
1384    
1385 root 1.1 =head1 SEE ALSO
1386    
1387 root 1.68 L<AnyEvent::MP::Intro> - a gentle introduction.
1388    
1389     L<AnyEvent::MP::Kernel> - more, lower-level, stuff.
1390    
1391 root 1.113 L<AnyEvent::MP::Global> - network maintenance and port groups, to find
1392 root 1.68 your applications.
1393    
1394 root 1.105 L<AnyEvent::MP::DataConn> - establish data connections between nodes.
1395    
1396 root 1.81 L<AnyEvent::MP::LogCatcher> - simple service to display log messages from
1397     all nodes.
1398    
1399 root 1.1 L<AnyEvent>.
1400    
1401     =head1 AUTHOR
1402    
1403     Marc Lehmann <schmorp@schmorp.de>
1404     http://home.schmorp.de/
1405    
1406     =cut
1407    
1408     1
1409