ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP.pm
(Generate patch)

Comparing AnyEvent-MP/MP.pm (file contents):
Revision 1.86 by root, Wed Sep 9 01:47:01 2009 UTC vs.
Revision 1.92 by root, Tue Sep 22 14:13:33 2009 UTC

1=head1 NAME 1=head1 NAME
2 2
3AnyEvent::MP - multi-processing/message-passing framework 3AnyEvent::MP - erlang-style multi-processing/message-passing framework
4 4
5=head1 SYNOPSIS 5=head1 SYNOPSIS
6 6
7 use AnyEvent::MP; 7 use AnyEvent::MP;
8 8
31 31
32 # create a port on another node 32 # create a port on another node
33 my $port = spawn $node, $initfunc, @initdata; 33 my $port = spawn $node, $initfunc, @initdata;
34 34
35 # monitoring 35 # monitoring
36 mon $port, $cb->(@msg) # callback is invoked on death 36 mon $localport, $cb->(@msg) # callback is invoked on death
37 mon $port, $otherport # kill otherport on abnormal death 37 mon $localport, $otherport # kill otherport on abnormal death
38 mon $port, $otherport, @msg # send message on death 38 mon $localport, $otherport, @msg # send message on death
39 39
40=head1 CURRENT STATUS 40=head1 CURRENT STATUS
41 41
42 bin/aemp - stable. 42 bin/aemp - stable.
43 AnyEvent::MP - stable API, should work. 43 AnyEvent::MP - stable API, should work.
44 AnyEvent::MP::Intro - explains most concepts. 44 AnyEvent::MP::Intro - explains most concepts.
45 AnyEvent::MP::Kernel - mostly stable. 45 AnyEvent::MP::Kernel - mostly stable API.
46 AnyEvent::MP::Global - stable but incomplete, protocol not yet final. 46 AnyEvent::MP::Global - stable API.
47
48stay tuned.
49 47
50=head1 DESCRIPTION 48=head1 DESCRIPTION
51 49
52This module (-family) implements a simple message passing framework. 50This module (-family) implements a simple message passing framework.
53 51
150our $VERSION = $AnyEvent::MP::Kernel::VERSION; 148our $VERSION = $AnyEvent::MP::Kernel::VERSION;
151 149
152our @EXPORT = qw( 150our @EXPORT = qw(
153 NODE $NODE *SELF node_of after 151 NODE $NODE *SELF node_of after
154 configure 152 configure
155 snd rcv mon mon_guard kil reg psub spawn 153 snd rcv mon mon_guard kil psub spawn cal
156 port 154 port
157); 155);
158 156
159our $SELF; 157our $SELF;
160 158
229L<AnyEvent::MP::Global> module, which will then use it to keep 227L<AnyEvent::MP::Global> module, which will then use it to keep
230connectivity with at least one node at any point in time. 228connectivity with at least one node at any point in time.
231 229
232=back 230=back
233 231
234Example: become a distributed node using the locla node name as profile. 232Example: become a distributed node using the local node name as profile.
235This should be the most common form of invocation for "daemon"-type nodes. 233This should be the most common form of invocation for "daemon"-type nodes.
236 234
237 configure 235 configure
238 236
239Example: become an anonymous node. This form is often used for commandline 237Example: become an anonymous node. This form is often used for commandline
566 } 564 }
567 } 565 }
568 566
569 $node->monitor ($port, $cb); 567 $node->monitor ($port, $cb);
570 568
569 $cb += 0;
570
571 defined wantarray 571 defined wantarray
572 and AnyEvent::Util::guard { $node->unmonitor ($port, $cb) } 572 and AnyEvent::Util::guard { $node->unmonitor ($port, $cb) }
573} 573}
574 574
575=item $guard = mon_guard $port, $ref, $ref... 575=item $guard = mon_guard $port, $ref, $ref...
715 ? $action[0]() 715 ? $action[0]()
716 : snd @action; 716 : snd @action;
717 }; 717 };
718} 718}
719 719
720=item cal $port, @msg, $callback[, $timeout]
721
722A simple form of RPC - sends a message to the given C<$port> with the
723given contents (C<@msg>), but adds a reply port to the message.
724
725The reply port is created temporarily just for the purpose of receiving
726the reply, and will be C<kil>ed when no longer needed.
727
728A reply message sent to the port is passed to the C<$callback> as-is.
729
730If an optional time-out (in seconds) is given and it is not C<undef>,
731then the callback will be called without any arguments after the time-out
732elapsed and the port is C<kil>ed.
733
734If no time-out is given, then the local port will monitor the remote port
735instead, so it eventually gets cleaned-up.
736
737Currently this function returns the temporary port, but this "feature"
738might go in future versions unless you can make a convincing case that
739this is indeed useful for something.
740
741=cut
742
743sub cal(@) {
744 my $timeout = ref $_[-1] ? undef : pop;
745 my $cb = pop;
746
747 my $port = port {
748 undef $timeout;
749 kil $SELF;
750 &$cb;
751 };
752
753 if (defined $timeout) {
754 $timeout = AE::timer $timeout, 0, sub {
755 undef $timeout;
756 kil $port;
757 $cb->();
758 };
759 } else {
760 mon $_[0], sub {
761 kil $port;
762 $cb->();
763 };
764 }
765
766 push @_, $port;
767 &snd;
768
769 $port
770}
771
720=back 772=back
721 773
722=head1 AnyEvent::MP vs. Distributed Erlang 774=head1 AnyEvent::MP vs. Distributed Erlang
723 775
724AnyEvent::MP got lots of its ideas from distributed Erlang (Erlang node 776AnyEvent::MP got lots of its ideas from distributed Erlang (Erlang node

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines