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