ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/README
Revision: 1.15
Committed: Wed Apr 16 15:10:10 2008 UTC (16 years, 1 month ago) by root
Branch: MAIN
CVS Tags: rel-3_1
Changes since 1.14: +36 -29 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.2 NAME
2     AnyEvent - provide framework for multiple event loops
3    
4 root 1.15 EV, Event, Coro::EV, Coro::Event, Glib, Tk, Perl - various supported
5     event loops
6 root 1.2
7     SYNOPSIS
8 root 1.4 use AnyEvent;
9 root 1.2
10 root 1.6 my $w = AnyEvent->io (fh => $fh, poll => "r|w", cb => sub {
11 root 1.2 ...
12     });
13 root 1.3
14     my $w = AnyEvent->timer (after => $seconds, cb => sub {
15 root 1.2 ...
16     });
17    
18 root 1.6 my $w = AnyEvent->condvar; # stores wether a condition was flagged
19     $w->wait; # enters "main loop" till $condvar gets ->broadcast
20 root 1.3 $w->broadcast; # wake up current and all future wait's
21    
22 root 1.14 WHY YOU SHOULD USE THIS MODULE (OR NOT)
23     Glib, POE, IO::Async, Event... CPAN offers event models by the dozen
24     nowadays. So what is different about AnyEvent?
25    
26     Executive Summary: AnyEvent is *compatible*, AnyEvent is *free of
27     policy* and AnyEvent is *small and efficient*.
28    
29     First and foremost, *AnyEvent is not an event model* itself, it only
30     interfaces to whatever event model the main program happens to use in a
31     pragmatic way. For event models and certain classes of immortals alike,
32     the statement "there can only be one" is a bitter reality, and AnyEvent
33     helps hiding the differences.
34    
35     The goal of AnyEvent is to offer module authors the ability to do event
36     programming (waiting for I/O or timer events) without subscribing to a
37     religion, a way of living, and most importantly: without forcing your
38     module users into the same thing by forcing them to use the same event
39     model you use.
40    
41     For modules like POE or IO::Async (which is actually doing all I/O
42     *synchronously*...), using them in your module is like joining a cult:
43     After you joined, you are dependent on them and you cannot use anything
44     else, as it is simply incompatible to everything that isn't itself.
45    
46     AnyEvent + POE works fine. AnyEvent + Glib works fine. AnyEvent + Tk
47     works fine etc. etc. but none of these work together with the rest: POE
48     + IO::Async? no go. Tk + Event? no go. If your module uses one of those,
49     every user of your module has to use it, too. If your module uses
50     AnyEvent, it works transparently with all event models it supports
51     (including stuff like POE and IO::Async).
52    
53     In addition of being free of having to use *the one and only true event
54     model*, AnyEvent also is free of bloat and policy: with POE or similar
55     modules, you get an enourmous amount of code and strict rules you have
56     to follow. AnyEvent, on the other hand, is lean and to the point by only
57     offering the functionality that is useful, in as thin as a wrapper as
58     technically possible.
59    
60     Of course, if you want lots of policy (this can arguably be somewhat
61     useful) and you want to force your users to use the one and only event
62     model, you should *not* use this module.
63    
64 root 1.2 DESCRIPTION
65     AnyEvent provides an identical interface to multiple event loops. This
66 root 1.6 allows module authors to utilise an event loop without forcing module
67 root 1.2 users to use the same event loop (as only a single event loop can
68     coexist peacefully at any one time).
69    
70     The interface itself is vaguely similar but not identical to the Event
71     module.
72    
73     On the first call of any method, the module tries to detect the
74     currently loaded event loop by probing wether any of the following
75 root 1.15 modules is loaded: Coro::EV, Coro::Event, EV, Event, Glib, Tk. The first
76     one found is used. If none are found, the module tries to load these
77     modules in the order given. The first one that could be successfully
78     loaded will be used. If still none could be found, AnyEvent will fall
79     back to a pure-perl event loop, which is also not very efficient.
80 root 1.6
81     Because AnyEvent first checks for modules that are already loaded,
82     loading an Event model explicitly before first using AnyEvent will
83     likely make that model the default. For example:
84    
85     use Tk;
86     use AnyEvent;
87    
88     # .. AnyEvent will likely default to Tk
89    
90     The pure-perl implementation of AnyEvent is called
91     "AnyEvent::Impl::Perl". Like other event modules you can load it
92     explicitly.
93    
94     WATCHERS
95     AnyEvent has the central concept of a *watcher*, which is an object that
96     stores relevant data for each kind of event you are waiting for, such as
97     the callback to call, the filehandle to watch, etc.
98    
99     These watchers are normal Perl objects with normal Perl lifetime. After
100     creating a watcher it will immediately "watch" for events and invoke the
101     callback. To disable the watcher you have to destroy it (e.g. by setting
102     the variable that stores it to "undef" or otherwise deleting all
103     references to it).
104    
105     All watchers are created by calling a method on the "AnyEvent" class.
106    
107     IO WATCHERS
108     You can create I/O watcher by calling the "AnyEvent->io" method with the
109     following mandatory arguments:
110    
111     "fh" the Perl *filehandle* (not filedescriptor) to watch for events.
112     "poll" must be a string that is either "r" or "w", that creates a
113 root 1.13 watcher waiting for "r"eadable or "w"ritable events. "cb" the callback
114 root 1.6 to invoke everytime the filehandle becomes ready.
115    
116     Filehandles will be kept alive, so as long as the watcher exists, the
117     filehandle exists, too.
118    
119     Example:
120    
121     # wait for readability of STDIN, then read a line and disable the watcher
122     my $w; $w = AnyEvent->io (fh => \*STDIN, poll => 'r', cb => sub {
123     chomp (my $input = <STDIN>);
124     warn "read: $input\n";
125     undef $w;
126     });
127    
128 root 1.8 TIME WATCHERS
129     You can create a time watcher by calling the "AnyEvent->timer" method
130 root 1.6 with the following mandatory arguments:
131    
132     "after" after how many seconds (fractions are supported) should the
133     timer activate. "cb" the callback to invoke.
134    
135     The timer callback will be invoked at most once: if you want a repeating
136     timer you have to create a new watcher (this is a limitation by both Tk
137     and Glib).
138    
139     Example:
140    
141     # fire an event after 7.7 seconds
142     my $w = AnyEvent->timer (after => 7.7, cb => sub {
143     warn "timeout\n";
144     });
145    
146     # to cancel the timer:
147 root 1.13 undef $w;
148 root 1.6
149     CONDITION WATCHERS
150     Condition watchers can be created by calling the "AnyEvent->condvar"
151     method without any arguments.
152    
153     A condition watcher watches for a condition - precisely that the
154     "->broadcast" method has been called.
155    
156 root 1.14 Note that condition watchers recurse into the event loop - if you have
157     two watchers that call "->wait" in a round-robbin fashion, you lose.
158     Therefore, condition watchers are good to export to your caller, but you
159     should avoid making a blocking wait, at least in callbacks, as this
160     usually asks for trouble.
161    
162 root 1.6 The watcher has only two methods:
163    
164     $cv->wait
165     Wait (blocking if necessary) until the "->broadcast" method has been
166     called on c<$cv>, while servicing other watchers normally.
167    
168     You can only wait once on a condition - additional calls will return
169     immediately.
170    
171 root 1.15 Not all event models support a blocking wait - some die in that case
172     (programs might want to do that so they stay interactive), so *if
173     you are using this from a module, never require a blocking wait*,
174     but let the caller decide wether the call will block or not (for
175     example, by coupling condition variables with some kind of request
176     results and supporting callbacks so the caller knows that getting
177     the result will not block, while still suppporting blocking waits if
178     the caller so desires).
179    
180     Another reason *never* to "->wait" in a module is that you cannot
181     sensibly have two "->wait"'s in parallel, as that would require
182     multiple interpreters or coroutines/threads, none of which
183     "AnyEvent" can supply (the coroutine-aware backends "Coro::EV" and
184     "Coro::Event" explicitly support concurrent "->wait"'s from
185     different coroutines, however).
186    
187 root 1.6 $cv->broadcast
188     Flag the condition as ready - a running "->wait" and all further
189     calls to "wait" will return after this method has been called. If
190     nobody is waiting the broadcast will be remembered..
191    
192     Example:
193    
194     # wait till the result is ready
195     my $result_ready = AnyEvent->condvar;
196    
197     # do something such as adding a timer
198     # or socket watcher the calls $result_ready->broadcast
199     # when the "result" is ready.
200    
201     $result_ready->wait;
202    
203 root 1.8 SIGNAL WATCHERS
204     You can listen for signals using a signal watcher, "signal" is the
205     signal *name* without any "SIG" prefix. Multiple signals events can be
206 root 1.9 clumped together into one callback invocation, and callback invocation
207 root 1.8 might or might not be asynchronous.
208    
209     These watchers might use %SIG, so programs overwriting those signals
210     directly will likely not work correctly.
211    
212     Example: exit on SIGINT
213    
214     my $w = AnyEvent->signal (signal => "INT", cb => sub { exit 1 });
215    
216     CHILD PROCESS WATCHERS
217     You can also listen for the status of a child process specified by the
218 root 1.11 "pid" argument (or any child if the pid argument is 0). The watcher will
219     trigger as often as status change for the child are received. This works
220     by installing a signal handler for "SIGCHLD". The callback will be
221     called with the pid and exit status (as returned by waitpid).
222 root 1.8
223     Example: wait for pid 1333
224    
225     my $w = AnyEvent->child (pid => 1333, cb => sub { warn "exit status $?" });
226    
227 root 1.7 GLOBALS
228     $AnyEvent::MODEL
229     Contains "undef" until the first watcher is being created. Then it
230     contains the event model that is being used, which is the name of
231     the Perl class implementing the model. This class is usually one of
232     the "AnyEvent::Impl:xxx" modules, but can be any other class in the
233     case AnyEvent has been extended at runtime (e.g. in *rxvt-unicode*).
234    
235     The known classes so far are:
236    
237 root 1.12 AnyEvent::Impl::CoroEV based on Coro::EV, best choice.
238 root 1.15 AnyEvent::Impl::CoroEvent based on Coro::Event, second best choice.
239 root 1.12 AnyEvent::Impl::EV based on EV (an interface to libev, also best choice).
240 root 1.11 AnyEvent::Impl::Event based on Event, also second best choice :)
241 root 1.15 AnyEvent::Impl::Glib based on Glib, third-best choice.
242 root 1.7 AnyEvent::Impl::Tk based on Tk, very bad choice.
243 root 1.15 AnyEvent::Impl::Perl pure-perl implementation, inefficient but portable.
244 root 1.7
245 root 1.8 AnyEvent::detect
246     Returns $AnyEvent::MODEL, forcing autodetection of the event model
247     if necessary. You should only call this function right before you
248     would have created an AnyEvent watcher anyway, that is, very late at
249     runtime.
250    
251 root 1.6 WHAT TO DO IN A MODULE
252     As a module author, you should "use AnyEvent" and call AnyEvent methods
253     freely, but you should not load a specific event module or rely on it.
254    
255     Be careful when you create watchers in the module body - Anyevent will
256     decide which event module to use as soon as the first method is called,
257     so by calling AnyEvent in your module body you force the user of your
258     module to load the event module first.
259    
260     WHAT TO DO IN THE MAIN PROGRAM
261     There will always be a single main program - the only place that should
262     dictate which event model to use.
263    
264     If it doesn't care, it can just "use AnyEvent" and use it itself, or not
265     do anything special and let AnyEvent decide which implementation to
266     chose.
267    
268     If the main program relies on a specific event model (for example, in
269     Gtk2 programs you have to rely on either Glib or Glib::Event), you
270     should load it before loading AnyEvent or any module that uses it,
271     generally, as early as possible. The reason is that modules might create
272     watchers when they are loaded, and AnyEvent will decide on the event
273     model to use as soon as it creates watchers, and it might chose the
274     wrong one unless you load the correct one yourself.
275    
276     You can chose to use a rather inefficient pure-perl implementation by
277     loading the "AnyEvent::Impl::Perl" module, but letting AnyEvent chose is
278     generally better.
279 root 1.2
280 root 1.5 SUPPLYING YOUR OWN EVENT MODEL INTERFACE
281     If you need to support another event library which isn't directly
282     supported by AnyEvent, you can supply your own interface to it by
283 root 1.6 pushing, before the first watcher gets created, the package name of the
284 root 1.5 event module and the package name of the interface to use onto
285     @AnyEvent::REGISTRY. You can do that before and even without loading
286     AnyEvent.
287    
288     Example:
289    
290     push @AnyEvent::REGISTRY, [urxvt => urxvt::anyevent::];
291    
292 root 1.6 This tells AnyEvent to (literally) use the "urxvt::anyevent::"
293     package/class when it finds the "urxvt" package/module is loaded. When
294     AnyEvent is loaded and asked to find a suitable event model, it will
295     first check for the presence of urxvt.
296    
297 root 1.8 The class should provide implementations for all watcher types (see
298 root 1.6 AnyEvent::Impl::Event (source code), AnyEvent::Impl::Glib (Source code)
299     and so on for actual examples, use "perldoc -m AnyEvent::Impl::Glib" to
300     see the sources).
301 root 1.5
302     The above isn't fictitious, the *rxvt-unicode* (a.k.a. urxvt) uses the
303 root 1.6 above line as-is. An interface isn't included in AnyEvent because it
304 root 1.5 doesn't make sense outside the embedded interpreter inside
305     *rxvt-unicode*, and it is updated and maintained as part of the
306     *rxvt-unicode* distribution.
307    
308 root 1.6 *rxvt-unicode* also cheats a bit by not providing blocking access to
309     condition variables: code blocking while waiting for a condition will
310     "die". This still works with most modules/usages, and blocking calls
311 root 1.10 must not be in an interactive application, so it makes sense.
312 root 1.6
313 root 1.4 ENVIRONMENT VARIABLES
314     The following environment variables are used by this module:
315    
316     "PERL_ANYEVENT_VERBOSE" when set to 2 or higher, reports which event
317     model gets used.
318    
319 root 1.2 EXAMPLE
320     The following program uses an io watcher to read data from stdin, a
321     timer to display a message once per second, and a condvar to exit the
322     program when the user enters quit:
323    
324     use AnyEvent;
325    
326     my $cv = AnyEvent->condvar;
327    
328     my $io_watcher = AnyEvent->io (fh => \*STDIN, poll => 'r', cb => sub {
329     warn "io event <$_[0]>\n"; # will always output <r>
330     chomp (my $input = <STDIN>); # read a line
331     warn "read: $input\n"; # output what has been read
332     $cv->broadcast if $input =~ /^q/i; # quit program if /^q/i
333     });
334    
335     my $time_watcher; # can only be used once
336    
337     sub new_timer {
338     $timer = AnyEvent->timer (after => 1, cb => sub {
339     warn "timeout\n"; # print 'timeout' about every second
340     &new_timer; # and restart the time
341     });
342     }
343    
344     new_timer; # create first timer
345    
346     $cv->wait; # wait until user enters /^q/i
347    
348 root 1.3 REAL-WORLD EXAMPLE
349     Consider the Net::FCP module. It features (among others) the following
350     API calls, which are to freenet what HTTP GET requests are to http:
351    
352     my $data = $fcp->client_get ($url); # blocks
353    
354     my $transaction = $fcp->txn_client_get ($url); # does not block
355     $transaction->cb ( sub { ... } ); # set optional result callback
356     my $data = $transaction->result; # possibly blocks
357    
358     The "client_get" method works like "LWP::Simple::get": it requests the
359     given URL and waits till the data has arrived. It is defined to be:
360    
361     sub client_get { $_[0]->txn_client_get ($_[1])->result }
362    
363     And in fact is automatically generated. This is the blocking API of
364     Net::FCP, and it works as simple as in any other, similar, module.
365    
366     More complicated is "txn_client_get": It only creates a transaction
367     (completion, result, ...) object and initiates the transaction.
368    
369     my $txn = bless { }, Net::FCP::Txn::;
370    
371     It also creates a condition variable that is used to signal the
372     completion of the request:
373    
374     $txn->{finished} = AnyAvent->condvar;
375    
376     It then creates a socket in non-blocking mode.
377    
378     socket $txn->{fh}, ...;
379     fcntl $txn->{fh}, F_SETFL, O_NONBLOCK;
380     connect $txn->{fh}, ...
381     and !$!{EWOULDBLOCK}
382     and !$!{EINPROGRESS}
383     and Carp::croak "unable to connect: $!\n";
384    
385 root 1.4 Then it creates a write-watcher which gets called whenever an error
386 root 1.3 occurs or the connection succeeds:
387    
388     $txn->{w} = AnyEvent->io (fh => $txn->{fh}, poll => 'w', cb => sub { $txn->fh_ready_w });
389    
390     And returns this transaction object. The "fh_ready_w" callback gets
391     called as soon as the event loop detects that the socket is ready for
392     writing.
393    
394     The "fh_ready_w" method makes the socket blocking again, writes the
395     request data and replaces the watcher by a read watcher (waiting for
396     reply data). The actual code is more complicated, but that doesn't
397     matter for this example:
398    
399     fcntl $txn->{fh}, F_SETFL, 0;
400     syswrite $txn->{fh}, $txn->{request}
401     or die "connection or write error";
402     $txn->{w} = AnyEvent->io (fh => $txn->{fh}, poll => 'r', cb => sub { $txn->fh_ready_r });
403    
404     Again, "fh_ready_r" waits till all data has arrived, and then stores the
405     result and signals any possible waiters that the request ahs finished:
406    
407     sysread $txn->{fh}, $txn->{buf}, length $txn->{$buf};
408    
409     if (end-of-file or data complete) {
410     $txn->{result} = $txn->{buf};
411     $txn->{finished}->broadcast;
412 root 1.4 $txb->{cb}->($txn) of $txn->{cb}; # also call callback
413 root 1.3 }
414    
415     The "result" method, finally, just waits for the finished signal (if the
416     request was already finished, it doesn't wait, of course, and returns
417     the data:
418    
419     $txn->{finished}->wait;
420 root 1.4 return $txn->{result};
421 root 1.3
422     The actual code goes further and collects all errors ("die"s,
423     exceptions) that occured during request processing. The "result" method
424     detects wether an exception as thrown (it is stored inside the $txn
425     object) and just throws the exception, which means connection errors and
426     other problems get reported tot he code that tries to use the result,
427     not in a random callback.
428    
429     All of this enables the following usage styles:
430    
431     1. Blocking:
432    
433     my $data = $fcp->client_get ($url);
434    
435 root 1.15 2. Blocking, but running in parallel:
436 root 1.3
437     my @datas = map $_->result,
438     map $fcp->txn_client_get ($_),
439     @urls;
440    
441     Both blocking examples work without the module user having to know
442     anything about events.
443    
444 root 1.15 3a. Event-based in a main program, using any supported event module:
445 root 1.3
446 root 1.15 use EV;
447 root 1.3
448     $fcp->txn_client_get ($url)->cb (sub {
449     my $txn = shift;
450     my $data = $txn->result;
451     ...
452     });
453    
454 root 1.15 EV::loop;
455 root 1.3
456     3b. The module user could use AnyEvent, too:
457    
458     use AnyEvent;
459    
460     my $quit = AnyEvent->condvar;
461    
462     $fcp->txn_client_get ($url)->cb (sub {
463     ...
464     $quit->broadcast;
465     });
466    
467     $quit->wait;
468    
469 root 1.2 SEE ALSO
470 root 1.15 Event modules: Coro::EV, EV, EV::Glib, Glib::EV, Coro::Event, Event,
471     Glib::Event, Glib, Coro, Tk.
472 root 1.3
473 root 1.15 Implementations: AnyEvent::Impl::CoroEV, AnyEvent::Impl::EV,
474     AnyEvent::Impl::CoroEvent, AnyEvent::Impl::Event, AnyEvent::Impl::Glib,
475     AnyEvent::Impl::Tk, AnyEvent::Impl::Perl.
476 root 1.3
477 root 1.15 Nontrivial usage examples: Net::FCP, Net::XMPP2.
478 root 1.2
479