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

Comparing AnyEvent/lib/AnyEvent.pm (file contents):
Revision 1.165 by root, Tue Jul 8 23:07:26 2008 UTC vs.
Revision 1.173 by root, Mon Jul 21 03:47:22 2008 UTC

6 6
7=head1 SYNOPSIS 7=head1 SYNOPSIS
8 8
9 use AnyEvent; 9 use AnyEvent;
10 10
11 my $w = AnyEvent->io (fh => $fh, poll => "r|w", cb => sub { 11 my $w = AnyEvent->io (fh => $fh, poll => "r|w", cb => sub { ... });
12 ...
13 });
14 12
15 my $w = AnyEvent->timer (after => $seconds, cb => sub { 13 my $w = AnyEvent->timer (after => $seconds, cb => sub { ... });
14 my $w = AnyEvent->timer (after => $seconds, interval => $seconds, cb => ...
15
16 print AnyEvent->now; # prints current event loop time
17 print AnyEvent->time; # think Time::HiRes::time or simply CORE::time.
18
19 my $w = AnyEvent->signal (signal => "TERM", cb => sub { ... });
20
21 my $w = AnyEvent->child (pid => $pid, cb => sub {
22 my ($pid, $status) = @_;
16 ... 23 ...
17 }); 24 });
18 25
19 my $w = AnyEvent->condvar; # stores whether a condition was flagged 26 my $w = AnyEvent->condvar; # stores whether a condition was flagged
20 $w->send; # wake up current and all future recv's 27 $w->send; # wake up current and all future recv's
21 $w->recv; # enters "main loop" till $condvar gets ->send 28 $w->recv; # enters "main loop" till $condvar gets ->send
29 # use a condvar in callback mode:
30 $w->cb (sub { $_[0]->recv });
22 31
23=head1 INTRODUCTION/TUTORIAL 32=head1 INTRODUCTION/TUTORIAL
24 33
25This manpage is mainly a reference manual. If you are interested 34This manpage is mainly a reference manual. If you are interested
26in a tutorial or some gentle introduction, have a look at the 35in a tutorial or some gentle introduction, have a look at the
33 42
34Executive Summary: AnyEvent is I<compatible>, AnyEvent is I<free of 43Executive Summary: AnyEvent is I<compatible>, AnyEvent is I<free of
35policy> and AnyEvent is I<small and efficient>. 44policy> and AnyEvent is I<small and efficient>.
36 45
37First and foremost, I<AnyEvent is not an event model> itself, it only 46First and foremost, I<AnyEvent is not an event model> itself, it only
38interfaces to whatever event model the main program happens to use in a 47interfaces to whatever event model the main program happens to use, in a
39pragmatic way. For event models and certain classes of immortals alike, 48pragmatic way. For event models and certain classes of immortals alike,
40the statement "there can only be one" is a bitter reality: In general, 49the statement "there can only be one" is a bitter reality: In general,
41only one event loop can be active at the same time in a process. AnyEvent 50only one event loop can be active at the same time in a process. AnyEvent
42helps hiding the differences between those event loops. 51cannot change this, but it can hide the differences between those event
52loops.
43 53
44The goal of AnyEvent is to offer module authors the ability to do event 54The goal of AnyEvent is to offer module authors the ability to do event
45programming (waiting for I/O or timer events) without subscribing to a 55programming (waiting for I/O or timer events) without subscribing to a
46religion, a way of living, and most importantly: without forcing your 56religion, a way of living, and most importantly: without forcing your
47module users into the same thing by forcing them to use the same event 57module users into the same thing by forcing them to use the same event
48model you use. 58model you use.
49 59
50For modules like POE or IO::Async (which is a total misnomer as it is 60For modules like POE or IO::Async (which is a total misnomer as it is
51actually doing all I/O I<synchronously>...), using them in your module is 61actually doing all I/O I<synchronously>...), using them in your module is
52like joining a cult: After you joined, you are dependent on them and you 62like joining a cult: After you joined, you are dependent on them and you
53cannot use anything else, as it is simply incompatible to everything that 63cannot use anything else, as they are simply incompatible to everything
54isn't itself. What's worse, all the potential users of your module are 64that isn't them. What's worse, all the potential users of your
55I<also> forced to use the same event loop you use. 65module are I<also> forced to use the same event loop you use.
56 66
57AnyEvent is different: AnyEvent + POE works fine. AnyEvent + Glib works 67AnyEvent is different: AnyEvent + POE works fine. AnyEvent + Glib works
58fine. AnyEvent + Tk works fine etc. etc. but none of these work together 68fine. AnyEvent + Tk works fine etc. etc. but none of these work together
59with the rest: POE + IO::Async? No go. Tk + Event? No go. Again: if 69with the rest: POE + IO::Async? No go. Tk + Event? No go. Again: if
60your module uses one of those, every user of your module has to use it, 70your module uses one of those, every user of your module has to use it,
61too. But if your module uses AnyEvent, it works transparently with all 71too. But if your module uses AnyEvent, it works transparently with all
62event models it supports (including stuff like POE and IO::Async, as long 72event models it supports (including stuff like IO::Async, as long as those
63as those use one of the supported event loops. It is trivial to add new 73use one of the supported event loops. It is trivial to add new event loops
64event loops to AnyEvent, too, so it is future-proof). 74to AnyEvent, too, so it is future-proof).
65 75
66In addition to being free of having to use I<the one and only true event 76In addition to being free of having to use I<the one and only true event
67model>, AnyEvent also is free of bloat and policy: with POE or similar 77model>, AnyEvent also is free of bloat and policy: with POE or similar
68modules, you get an enormous amount of code and strict rules you have to 78modules, you get an enormous amount of code and strict rules you have to
69follow. AnyEvent, on the other hand, is lean and up to the point, by only 79follow. AnyEvent, on the other hand, is lean and up to the point, by only
152=head2 I/O WATCHERS 162=head2 I/O WATCHERS
153 163
154You can create an I/O watcher by calling the C<< AnyEvent->io >> method 164You can create an I/O watcher by calling the C<< AnyEvent->io >> method
155with the following mandatory key-value pairs as arguments: 165with the following mandatory key-value pairs as arguments:
156 166
157C<fh> the Perl I<file handle> (I<not> file descriptor) to watch 167C<fh> the Perl I<file handle> (I<not> file descriptor) to watch for events
158for events. C<poll> must be a string that is either C<r> or C<w>, 168(AnyEvent might or might not keep a reference to this file handle). C<poll>
159which creates a watcher waiting for "r"eadable or "w"ritable events, 169must be a string that is either C<r> or C<w>, which creates a watcher
160respectively. C<cb> is the callback to invoke each time the file handle 170waiting for "r"eadable or "w"ritable events, respectively. C<cb> is the
161becomes ready. 171callback to invoke each time the file handle becomes ready.
162 172
163Although the callback might get passed parameters, their value and 173Although the callback might get passed parameters, their value and
164presence is undefined and you cannot rely on them. Portable AnyEvent 174presence is undefined and you cannot rely on them. Portable AnyEvent
165callbacks cannot use arguments passed to I/O watcher callbacks. 175callbacks cannot use arguments passed to I/O watcher callbacks.
166 176
303=back 313=back
304 314
305=head2 SIGNAL WATCHERS 315=head2 SIGNAL WATCHERS
306 316
307You can watch for signals using a signal watcher, C<signal> is the signal 317You can watch for signals using a signal watcher, C<signal> is the signal
308I<name> without any C<SIG> prefix, C<cb> is the Perl callback to 318I<name> in uppercase and without any C<SIG> prefix, C<cb> is the Perl
309be invoked whenever a signal occurs. 319callback to be invoked whenever a signal occurs.
310 320
311Although the callback might get passed parameters, their value and 321Although the callback might get passed parameters, their value and
312presence is undefined and you cannot rely on them. Portable AnyEvent 322presence is undefined and you cannot rely on them. Portable AnyEvent
313callbacks cannot use arguments passed to signal watcher callbacks. 323callbacks cannot use arguments passed to signal watcher callbacks.
314 324
379 389
380The instrument to do that is called a "condition variable", so called 390The instrument to do that is called a "condition variable", so called
381because they represent a condition that must become true. 391because they represent a condition that must become true.
382 392
383Condition variables can be created by calling the C<< AnyEvent->condvar 393Condition variables can be created by calling the C<< AnyEvent->condvar
394
384>> method, usually without arguments. The only argument pair allowed is 395>> method, usually without arguments. The only argument pair allowed is
396
385C<cb>, which specifies a callback to be called when the condition variable 397C<cb>, which specifies a callback to be called when the condition variable
386becomes true. 398becomes true, with the condition variable as the first argument (but not
399the results).
387 400
388After creation, the condition variable is "false" until it becomes "true" 401After creation, the condition variable is "false" until it becomes "true"
389by calling the C<send> method (or calling the condition variable as if it 402by calling the C<send> method (or calling the condition variable as if it
390were a callback, read about the caveats in the description for the C<< 403were a callback, read about the caveats in the description for the C<<
391->send >> method). 404->send >> method).
447 460
448 my $done = AnyEvent->condvar; 461 my $done = AnyEvent->condvar;
449 my $delay = AnyEvent->timer (after => 5, cb => $done); 462 my $delay = AnyEvent->timer (after => 5, cb => $done);
450 $done->recv; 463 $done->recv;
451 464
465Example: Imagine an API that returns a condvar and doesn't support
466callbacks. This is how you make a synchronous call, for example from
467the main program:
468
469 use AnyEvent::CouchDB;
470
471 ...
472
473 my @info = $couchdb->info->recv;
474
475And this is how you would just ste a callback to be called whenever the
476results are available:
477
478 $couchdb->info->cb (sub {
479 my @info = $_[0]->recv;
480 });
481
452=head3 METHODS FOR PRODUCERS 482=head3 METHODS FOR PRODUCERS
453 483
454These methods should only be used by the producing side, i.e. the 484These methods should only be used by the producing side, i.e. the
455code/module that eventually sends the signal. Note that it is also 485code/module that eventually sends the signal. Note that it is also
456the producer side which creates the condvar in most cases, but it isn't 486the producer side which creates the condvar in most cases, but it isn't
589=item $bool = $cv->ready 619=item $bool = $cv->ready
590 620
591Returns true when the condition is "true", i.e. whether C<send> or 621Returns true when the condition is "true", i.e. whether C<send> or
592C<croak> have been called. 622C<croak> have been called.
593 623
594=item $cb = $cv->cb ([new callback]) 624=item $cb = $cv->cb ($cb->($cv))
595 625
596This is a mutator function that returns the callback set and optionally 626This is a mutator function that returns the callback set and optionally
597replaces it before doing so. 627replaces it before doing so.
598 628
599The callback will be called when the condition becomes "true", i.e. when 629The callback will be called when the condition becomes "true", i.e. when
825no warnings; 855no warnings;
826use strict; 856use strict;
827 857
828use Carp; 858use Carp;
829 859
830our $VERSION = 4.2; 860our $VERSION = 4.22;
831our $MODEL; 861our $MODEL;
832 862
833our $AUTOLOAD; 863our $AUTOLOAD;
834our @ISA; 864our @ISA;
835 865
938 $MODEL 968 $MODEL
939 or die "No event module selected for AnyEvent and autodetect failed. Install any one of these modules: EV, Event or Glib."; 969 or die "No event module selected for AnyEvent and autodetect failed. Install any one of these modules: EV, Event or Glib.";
940 } 970 }
941 } 971 }
942 972
973 push @{"$MODEL\::ISA"}, "AnyEvent::Base";
974
943 unshift @ISA, $MODEL; 975 unshift @ISA, $MODEL;
944 push @{"$MODEL\::ISA"}, "AnyEvent::Base"; 976
977 require AnyEvent::Strict if $ENV{PERL_ANYEVENT_STRICT};
945 978
946 (shift @post_detect)->() while @post_detect; 979 (shift @post_detect)->() while @post_detect;
947 } 980 }
948 981
949 $MODEL 982 $MODEL
957 990
958 detect unless $MODEL; 991 detect unless $MODEL;
959 992
960 my $class = shift; 993 my $class = shift;
961 $class->$func (@_); 994 $class->$func (@_);
995}
996
997# utility function to dup a filehandle. this is used by many backends
998# to support binding more than one watcher per filehandle (they usually
999# allow only one watcher per fd, so we dup it to get a different one).
1000sub _dupfh($$$$) {
1001 my ($poll, $fh, $r, $w) = @_;
1002
1003 require Fcntl;
1004
1005 # cygwin requires the fh mode to be matching, unix doesn't
1006 my ($rw, $mode) = $poll eq "r" ? ($r, "<")
1007 : $poll eq "w" ? ($w, ">")
1008 : Carp::croak "AnyEvent->io requires poll set to either 'r' or 'w'";
1009
1010 open my $fh2, "$mode&" . fileno $fh
1011 or die "cannot dup() filehandle: $!";
1012
1013 # we assume CLOEXEC is already set by perl in all important cases
1014
1015 ($fh2, $rw)
962} 1016}
963 1017
964package AnyEvent::Base; 1018package AnyEvent::Base;
965 1019
966# default implementation for now and time 1020# default implementation for now and time
1176conditions, such as not being able to load the event model specified by 1230conditions, such as not being able to load the event model specified by
1177C<PERL_ANYEVENT_MODEL>. 1231C<PERL_ANYEVENT_MODEL>.
1178 1232
1179When set to C<2> or higher, cause AnyEvent to report to STDERR which event 1233When set to C<2> or higher, cause AnyEvent to report to STDERR which event
1180model it chooses. 1234model it chooses.
1235
1236=item C<PERL_ANYEVENT_STRICT>
1237
1238AnyEvent does not do much argument checking by default, as thorough
1239argument checking is very costly. Setting this variable to a true value
1240will cause AnyEvent to load C<AnyEvent::Strict> and then to thoroughly
1241check the arguments passed to most method calls. If it finds any problems
1242it will croak.
1243
1244In other words, enables "strict" mode.
1245
1246Unlike C<use strict> it is definitely recommended ot keep it off in
1247production.
1181 1248
1182=item C<PERL_ANYEVENT_MODEL> 1249=item C<PERL_ANYEVENT_MODEL>
1183 1250
1184This can be used to specify the event model to be used by AnyEvent, before 1251This can be used to specify the event model to be used by AnyEvent, before
1185auto detection and -probing kicks in. It must be a string consisting 1252auto detection and -probing kicks in. It must be a string consisting
1682 1749
1683 use AnyEvent; 1750 use AnyEvent;
1684 1751
1685Similar considerations apply to $ENV{PERL_ANYEVENT_VERBOSE}, as that can 1752Similar considerations apply to $ENV{PERL_ANYEVENT_VERBOSE}, as that can
1686be used to probe what backend is used and gain other information (which is 1753be used to probe what backend is used and gain other information (which is
1687probably even less useful to an attacker than PERL_ANYEVENT_MODEL). 1754probably even less useful to an attacker than PERL_ANYEVENT_MODEL), and
1755$ENV{PERL_ANYEGENT_STRICT}.
1688 1756
1689 1757
1690=head1 BUGS 1758=head1 BUGS
1691 1759
1692Perl 5.8 has numerous memleaks that sometimes hit this module and are hard 1760Perl 5.8 has numerous memleaks that sometimes hit this module and are hard

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines