ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent.pm
Revision: 1.52
Committed: Sat Apr 19 03:47:24 2008 UTC (16 years, 2 months ago) by root
Branch: MAIN
Changes since 1.51: +4 -4 lines
Log Message:
weather

File Contents

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