ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Intro.pod
Revision: 1.33
Committed: Tue Jul 30 22:13:09 2013 UTC (10 years, 10 months ago) by root
Branch: MAIN
CVS Tags: rel-7_05
Changes since 1.32: +5 -5 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.21 =head1 NAME
2    
3     AnyEvent::Intro - an introductory tutorial to AnyEvent
4    
5 root 1.2 =head1 Introduction to AnyEvent
6 root 1.1
7 root 1.2 This is a tutorial that will introduce you to the features of AnyEvent.
8 root 1.1
9 root 1.2 The first part introduces the core AnyEvent module (after swamping you a
10 root 1.25 bit in evangelism), which might already provide all you ever need: If you
11 root 1.17 are only interested in AnyEvent's event handling capabilities, read no
12     further.
13 root 1.1
14 root 1.2 The second part focuses on network programming using sockets, for which
15 root 1.17 AnyEvent offers a lot of support you can use, and a lot of workarounds
16     around portability quirks.
17 root 1.2
18    
19     =head1 What is AnyEvent?
20    
21 root 1.10 If you don't care for the whys and want to see code, skip this section!
22 root 1.2
23     AnyEvent is first of all just a framework to do event-based
24     programming. Typically such frameworks are an all-or-nothing thing: If you
25     use one such framework, you can't (easily, or even at all) use another in
26     the same program.
27    
28 root 1.27 AnyEvent is different - it is a thin abstraction layer on top of other
29 root 1.25 event loops, just like DBI is an abstraction of many different database
30     APIs. Its main purpose is to move the choice of the underlying framework
31     (the event loop) from the module author to the program author using the
32     module.
33 root 1.2
34     That means you can write code that uses events to control what it
35     does, without forcing other code in the same program to use the same
36     underlying framework as you do - i.e. you can create a Perl module
37     that is event-based using AnyEvent, and users of that module can still
38 root 1.25 choose between using L<Gtk2>, L<Tk>, L<Event> (or run inside Irssi or
39     rxvt-unicode) or any other supported event loop. AnyEvent even comes with
40     its own pure-perl event loop implementation, so your code works regardless
41     of other modules that might or might not be installed. The latter is
42     important, as AnyEvent does not have any hard dependencies to other
43     modules, which makes it easy to install, for example, when you lack a C
44 root 1.28 compiler. No matter what environment, AnyEvent will just cope with it.
45 root 1.25
46     A typical limitation of existing Perl modules such as L<Net::IRC> is that
47 root 1.28 they come with their own event loop: In L<Net::IRC>, a program which uses
48 root 1.25 it needs to start the event loop of L<Net::IRC>. That means that one
49     cannot integrate this module into a L<Gtk2> GUI for instance, as that
50     module, too, enforces the use of its own event loop (namely L<Glib>).
51    
52     Another example is L<LWP>: it provides no event interface at all. It's
53     a pure blocking HTTP (and FTP etc.) client library, which usually means
54     that you either have to start another process or have to fork for a HTTP
55     request, or use threads (e.g. L<Coro::LWP>), if you want to do something
56     else while waiting for the request to finish.
57    
58     The motivation behind these designs is often that a module doesn't want
59     to depend on some complicated XS-module (Net::IRC), or that it doesn't
60     want to force the user to use some specific event loop at all (LWP), out
61     of fear of severly limiting the usefulness of the module: If your module
62     requires Glib, it will not run in a Tk program.
63 root 1.1
64 root 1.25 L<AnyEvent> solves this dilemma, by B<not> forcing module authors to
65     either:
66 root 1.1
67     =over 4
68    
69 root 1.25 =item - write their own event loop (because it guarantees the availability
70     of an event loop everywhere - even on windows with no extra modules
71     installed).
72 root 1.1
73 root 1.25 =item - choose one specific event loop (because AnyEvent works with most
74     event loops available for Perl).
75 root 1.1
76     =back
77    
78 root 1.25 If the module author uses L<AnyEvent> for all his (or her) event needs
79     (IO events, timers, signals, ...) then all other modules can just use
80     his module and don't have to choose an event loop or adapt to his event
81     loop. The choice of the event loop is ultimately made by the program
82     author who uses all the modules and writes the main program. And even
83     there he doesn't have to choose, he can just let L<AnyEvent> choose the
84     most efficient event loop available on the system.
85 root 1.1
86     Read more about this in the main documentation of the L<AnyEvent> module.
87    
88    
89 root 1.2 =head1 Introduction to Event-Based Programming
90    
91     So what exactly is programming using events? It quite simply means that
92     instead of your code actively waiting for something, such as the user
93     entering something on STDIN:
94    
95     $| = 1; print "enter your name> ";
96    
97     my $name = <STDIN>;
98    
99     You instead tell your event framework to notify you in the event of some
100     data being available on STDIN, by using a callback mechanism:
101    
102     use AnyEvent;
103    
104     $| = 1; print "enter your name> ";
105    
106     my $name;
107    
108     my $wait_for_input = AnyEvent->io (
109     fh => \*STDIN, # which file handle to check
110     poll => "r", # which event to wait for ("r"ead data)
111     cb => sub { # what callback to execute
112     $name = <STDIN>; # read it
113     }
114     );
115    
116     # do something else here
117    
118     Looks more complicated, and surely is, but the advantage of using events
119 root 1.22 is that your program can do something else instead of waiting for input
120     (side note: combining AnyEvent with a thread package such as Coro can
121     recoup much of the simplicity, effectively getting the best of two
122     worlds).
123    
124     Waiting as done in the first example is also called "blocking" the process
125     because you "block"/keep your process from executing anything else while
126     you do so.
127 root 1.2
128 root 1.22 The second example avoids blocking by only registering interest in a read
129 root 1.28 event, which is fast and doesn't block your process. The callback will
130     be called only when data is available and can be read without blocking.
131 root 1.2
132     The "interest" is represented by an object returned by C<< AnyEvent->io
133 root 1.28 >> called a "watcher" object - thus named because it "watches" your
134 root 1.2 file handle (or other event sources) for the event you are interested in.
135    
136     In the example above, we create an I/O watcher by calling the C<<
137 root 1.28 AnyEvent->io >> method. A lack of further interest in some event is
138     expressed by simply forgetting about its watcher, for example by
139     C<undef>-ing the only variable it is stored in. AnyEvent will
140     automatically clean up the watcher if it is no longer used, much like
141     Perl closes your file handles if you no longer use them anywhere.
142 root 1.2
143 root 1.18 =head3 A short note on callbacks
144    
145     A common issue that hits people is the problem of passing parameters
146     to callbacks. Programmers used to languages such as C or C++ are often
147     used to a style where one passes the address of a function (a function
148     reference) and some data value, e.g.:
149    
150     sub callback {
151     my ($arg) = @_;
152    
153     $arg->method;
154     }
155    
156     my $arg = ...;
157    
158     call_me_back_later \&callback, $arg;
159    
160     This is clumsy, as the place where behaviour is specified (when the
161     callback is registered) is often far away from the place where behaviour
162     is implemented. It also doesn't use Perl syntax to invoke the code. There
163     is also an abstraction penalty to pay as one has to I<name> the callback,
164     which often is unnecessary and leads to nonsensical or duplicated names.
165    
166     In Perl, one can specify behaviour much more directly by using
167     I<closures>. Closures are code blocks that take a reference to the
168 root 1.28 enclosing scope(s) when they are created. This means lexical variables
169     in scope when a closure is created can be used inside the closure:
170 root 1.18
171     my $arg = ...;
172    
173     call_me_back_later sub { $arg->method };
174    
175 root 1.22 Under most circumstances, closures are faster, use fewer resources and
176 root 1.18 result in much clearer code then the traditional approach. Faster,
177     because parameter passing and storing them in local variables in Perl
178 root 1.22 is relatively slow. Fewer resources, because closures take references
179     to existing variables without having to create new ones, and clearer
180     code because it is immediately obvious that the second example calls the
181 root 1.18 C<method> method when the callback is invoked.
182    
183     Apart from these, the strongest argument for using closures with AnyEvent
184     is that AnyEvent does not allow passing parameters to the callback, so
185     closures are the only way to achieve that in most cases :->
186    
187    
188 root 1.31 =head3 A little hint to catch mistakes
189 root 1.19
190 root 1.31 AnyEvent does not check the parameters you pass in, at least not by
191     default. to enable checking, simply start your program with C<AE_STRICT=1>
192     in the environment, or put C<use AnyEvent::Strict> near the top of your
193     program:
194 root 1.19
195 root 1.31 AE_STRICT=1 perl myprogram
196 root 1.19
197 root 1.31 You can find more info on this and additional debugging aids later in this
198     introduction.
199 root 1.19
200    
201 root 1.2 =head2 Condition Variables
202    
203 root 1.22 Back to the I/O watcher example: The code is not yet a fully working
204     program, and will not work as-is. The reason is that your callback will
205 root 1.28 not be invoked out of the blue; you have to run the event loop first.
206     Also, event-based programs need to block sometimes too, such as when
207     there is nothing to do, and everything is waiting for new events to
208     arrive.
209 root 1.2
210     In AnyEvent, this is done using condition variables. Condition variables
211     are named "condition variables" because they represent a condition that is
212     initially false and needs to be fulfilled.
213    
214 root 1.10 You can also call them "merge points", "sync points", "rendezvous ports"
215 root 1.27 or even callbacks and many other things (and they are often called these
216     names in other frameworks). The important point is that you can create them
217 root 1.10 freely and later wait for them to become true.
218 root 1.2
219     Condition variables have two sides - one side is the "producer" of the
220 root 1.18 condition (whatever code detects and flags the condition), the other side
221     is the "consumer" (the code that waits for that condition).
222 root 1.2
223     In our example in the previous section, the producer is the event callback
224 root 1.18 and there is no consumer yet - let's change that right now:
225 root 1.2
226     use AnyEvent;
227    
228     $| = 1; print "enter your name> ";
229    
230     my $name;
231    
232     my $name_ready = AnyEvent->condvar;
233    
234     my $wait_for_input = AnyEvent->io (
235     fh => \*STDIN,
236     poll => "r",
237     cb => sub {
238     $name = <STDIN>;
239     $name_ready->send;
240     }
241     );
242    
243     # do something else here
244    
245     # now wait until the name is available:
246     $name_ready->recv;
247    
248 root 1.29 undef $wait_for_input; # watcher no longer needed
249 root 1.2
250     print "your name is $name\n";
251    
252     This program creates an AnyEvent condvar by calling the C<<
253     AnyEvent->condvar >> method. It then creates a watcher as usual, but
254 root 1.28 inside the callback it C<send>s the C<$name_ready> condition variable,
255 root 1.22 which causes whoever is waiting on it to continue.
256 root 1.2
257 root 1.22 The "whoever" in this case is the code that follows, which calls C<<
258 root 1.2 $name_ready->recv >>: The producer calls C<send>, the consumer calls
259     C<recv>.
260    
261     If there is no C<$name> available yet, then the call to C<<
262     $name_ready->recv >> will halt your program until the condition becomes
263     true.
264    
265     As the names C<send> and C<recv> imply, you can actually send and receive
266     data using this, for example, the above code could also be written like
267     this, without an extra variable to store the name in:
268    
269     use AnyEvent;
270    
271     $| = 1; print "enter your name> ";
272    
273     my $name_ready = AnyEvent->condvar;
274    
275     my $wait_for_input = AnyEvent->io (
276     fh => \*STDIN, poll => "r",
277 root 1.20 cb => sub { $name_ready->send (scalar <STDIN>) }
278 root 1.2 );
279    
280     # do something else here
281    
282     # now wait and fetch the name
283     my $name = $name_ready->recv;
284    
285 root 1.30 undef $wait_for_input; # watcher no longer needed
286 root 1.2
287     print "your name is $name\n";
288    
289 root 1.28 You can pass any number of arguments to C<send>, and every subsequent
290     call to C<recv> will return them.
291 root 1.2
292     =head2 The "main loop"
293    
294     Most event-based frameworks have something called a "main loop" or "event
295     loop run function" or something similar.
296    
297     Just like in C<recv> AnyEvent, these functions need to be called
298     eventually so that your event loop has a chance of actually looking for
299 root 1.28 the events you are interested in.
300 root 1.2
301     For example, in a L<Gtk2> program, the above example could also be written
302     like this:
303    
304     use Gtk2 -init;
305     use AnyEvent;
306    
307     ############################################
308     # create a window and some label
309    
310     my $window = new Gtk2::Window "toplevel";
311     $window->add (my $label = new Gtk2::Label "soon replaced by name");
312    
313     $window->show_all;
314    
315     ############################################
316     # do our AnyEvent stuff
317    
318     $| = 1; print "enter your name> ";
319    
320     my $name_ready = AnyEvent->condvar;
321    
322     my $wait_for_input = AnyEvent->io (
323     fh => \*STDIN, poll => "r",
324     cb => sub {
325     # set the label
326     $label->set_text (scalar <STDIN>);
327     print "enter another name> ";
328     }
329     );
330    
331     ############################################
332     # Now enter Gtk2's event loop
333    
334     main Gtk2;
335    
336     No condition variable anywhere in sight - instead, we just read a line
337     from STDIN and replace the text in the label. In fact, since nobody
338 root 1.28 C<undef>s C<$wait_for_input> you can enter multiple lines.
339 root 1.2
340     Instead of waiting for a condition variable, the program enters the Gtk2
341     main loop by calling C<< Gtk2->main >>, which will block the program and
342     wait for events to arrive.
343    
344 root 1.27 This also shows that AnyEvent is quite flexible - you didn't have to do
345     anything to make the AnyEvent watcher use Gtk2 (actually Glib) - it just
346 root 1.2 worked.
347    
348     Admittedly, the example is a bit silly - who would want to read names
349 root 1.28 from standard input in a Gtk+ application? But imagine that instead of
350     doing that, you make an HTTP request in the background and display its
351     results. In fact, with event-based programming you can make many
352 root 1.27 HTTP requests in parallel in your program and still provide feedback to
353 root 1.2 the user and stay interactive.
354    
355 root 1.22 And in the next part you will see how to do just that - by implementing an
356 root 1.2 HTTP request, on our own, with the utility modules AnyEvent comes with.
357    
358 root 1.4 Before that, however, let's briefly look at how you would write your
359 root 1.27 program using only AnyEvent, without ever calling some other event
360 root 1.2 loop's run function.
361    
362 root 1.22 In the example using condition variables, we used those to start waiting
363     for events, and in fact, condition variables are the solution:
364 root 1.2
365     my $quit_program = AnyEvent->condvar;
366    
367     # create AnyEvent watchers (or not) here
368    
369     $quit_program->recv;
370    
371 root 1.22 If any of your watcher callbacks decide to quit (this is often
372 root 1.28 called an "unloop" in other frameworks), they can just call C<<
373 root 1.22 $quit_program->send >>. Of course, they could also decide not to and
374 root 1.28 call C<exit> instead, or they could decide never to quit (e.g. in a
375     long-running daemon program).
376 root 1.2
377 root 1.22 If you don't need some clean quit functionality and just want to run the
378 root 1.28 event loop, you can do this:
379 root 1.2
380     AnyEvent->condvar->recv;
381    
382 root 1.28 And this is, in fact, the closest to the idea of a main loop run
383     function that AnyEvent offers.
384 root 1.2
385     =head2 Timers and other event sources
386    
387 root 1.28 So far, we have used only I/O watchers. These are useful mainly to find
388 root 1.26 out whether a socket has data to read, or space to write more data. On sane
389 root 1.2 operating systems this also works for console windows/terminals (typically
390     on standard input), serial lines, all sorts of other devices, basically
391     almost everything that has a file descriptor but isn't a file itself. (As
392     usual, "sane" excludes windows - on that platform you would need different
393 root 1.10 functions for all of these, complicating code immensely - think "socket
394 root 1.2 only" on windows).
395    
396 root 1.10 However, I/O is not everything - the second most important event source is
397 root 1.2 the clock. For example when doing an HTTP request you might want to time
398 root 1.10 out when the server doesn't answer within some predefined amount of time.
399 root 1.2
400     In AnyEvent, timer event watchers are created by calling the C<<
401     AnyEvent->timer >> method:
402    
403     use AnyEvent;
404    
405     my $cv = AnyEvent->condvar;
406    
407     my $wait_one_and_a_half_seconds = AnyEvent->timer (
408     after => 1.5, # after how many seconds to invoke the cb?
409     cb => sub { # the callback to invoke
410     $cv->send;
411     },
412     );
413    
414 root 1.10 # can do something else here
415 root 1.2
416     # now wait till our time has come
417     $cv->recv;
418    
419     Unlike I/O watchers, timers are only interested in the amount of seconds
420 root 1.22 they have to wait. When (at least) that amount of time has passed,
421     AnyEvent will invoke your callback.
422 root 1.2
423     Unlike I/O watchers, which will call your callback as many times as there
424 root 1.22 is data available, timers are normally one-shot: after they have "fired"
425     once and invoked your callback, they are dead and no longer do anything.
426 root 1.2
427     To get a repeating timer, such as a timer firing roughly once per second,
428 root 1.22 you can specify an C<interval> parameter:
429 root 1.2
430 root 1.22 my $once_per_second = AnyEvent->timer (
431     after => 0, # first invoke ASAP
432     interval => 1, # then invoke every second
433     cb => sub { # the callback to invoke
434     $cv->send;
435     },
436     );
437 root 1.2
438     =head3 More esoteric sources
439    
440     AnyEvent also has some other, more esoteric event sources you can tap
441 root 1.22 into: signal, child and idle watchers.
442 root 1.2
443 root 1.28 Signal watchers can be used to wait for "signal events", which means
444     your process was sent a signal (such as C<SIGTERM> or C<SIGUSR1>).
445 root 1.2
446 root 1.22 Child-process watchers wait for a child process to exit. They are useful
447     when you fork a separate process and need to know when it exits, but you
448 root 1.28 do not want to wait for that by blocking.
449 root 1.22
450     Idle watchers invoke their callback when the event loop has handled all
451     outstanding events, polled for new events and didn't find any, i.e., when
452     your process is otherwise idle. They are useful if you want to do some
453     non-trivial data processing that can be done when your program doesn't
454     have anything better to do.
455    
456     All these watcher types are described in detail in the main L<AnyEvent>
457     manual page.
458    
459     Sometimes you also need to know what the current time is: C<<
460     AnyEvent->now >> returns the time the event toolkit uses to schedule
461     relative timers, and is usually what you want. It is often cached (which
462     means it can be a bit outdated). In that case, you can use the more costly
463     C<< AnyEvent->time >> method which will ask your operating system for the
464     current time, which is slower, but also more up to date.
465 root 1.2
466 root 1.31
467 root 1.2 =head1 Network programming and AnyEvent
468    
469 root 1.3 So far you have seen how to register event watchers and handle events.
470 root 1.1
471 root 1.22 This is a great foundation to write network clients and servers, and might
472     be all that your module (or program) ever requires, but writing your own
473     I/O buffering again and again becomes tedious, not to mention that it
474     attracts errors.
475 root 1.3
476     While the core L<AnyEvent> module is still small and self-contained,
477     the distribution comes with some very useful utility modules such as
478     L<AnyEvent::Handle>, L<AnyEvent::DNS> and L<AnyEvent::Socket>. These can
479 root 1.28 make your life as a non-blocking network programmer a lot easier.
480 root 1.3
481 root 1.28 Here is a quick overview of these three modules:
482 root 1.4
483     =head2 L<AnyEvent::DNS>
484    
485     This module allows fully asynchronous DNS resolution. It is used mainly by
486     L<AnyEvent::Socket> to resolve hostnames and service ports for you, but is
487     a great way to do other DNS resolution tasks, such as reverse lookups of
488     IP addresses for log files.
489 root 1.1
490 root 1.2 =head2 L<AnyEvent::Handle>
491 root 1.1
492 root 1.22 This module handles non-blocking IO on (socket-, pipe- etc.) file handles
493     in an event based manner. It provides a wrapper object around your file
494     handle that provides queueing and buffering of incoming and outgoing data
495     for you.
496 root 1.1
497 root 1.4 It also implements the most common data formats, such as text lines, or
498     fixed and variable-width data blocks.
499 root 1.1
500 root 1.2 =head2 L<AnyEvent::Socket>
501 root 1.1
502     This module provides you with functions that handle socket creation
503     and IP address magic. The two main functions are C<tcp_connect> and
504     C<tcp_server>. The former will connect a (streaming) socket to an internet
505     host for you and the later will make a server socket for you, to accept
506     connections.
507    
508     This module also comes with transparent IPv6 support, this means: If you
509     write your programs with this module, you will be IPv6 ready without doing
510 root 1.4 anything special.
511 root 1.1
512     It also works around a lot of portability quirks (especially on the
513     windows platform), which makes it even easier to write your programs in a
514 root 1.4 portable way (did you know that windows uses different error codes for all
515     socket functions and that Perl does not know about these? That "Unknown
516     error 10022" (which is C<WSAEINVAL>) can mean that our C<connect> call was
517     successful? That unsuccessful TCP connects might never be reported back
518     to your program? That C<WSAEINPROGRESS> means your C<connect> call was
519     ignored instead of being in progress? AnyEvent::Socket works around all of
520     these Windows/Perl bugs for you).
521    
522 root 1.11 =head2 Implementing a parallel finger client with non-blocking connects
523 root 1.16 and AnyEvent::Socket
524 root 1.4
525     The finger protocol is one of the simplest protocols in use on the
526     internet. Or in use in the past, as almost nobody uses it anymore.
527    
528     It works by connecting to the finger port on another host, writing a
529     single line with a user name and then reading the finger response, as
530     specified by that user. OK, RFC 1288 specifies a vastly more complex
531     protocol, but it basically boils down to this:
532    
533 root 1.32 # telnet freebsd.org finger
534     Trying 8.8.178.135...
535     Connected to freebsd.org (8.8.178.135).
536 root 1.4 Escape character is '^]'.
537 root 1.32 larry
538     Login: lile Name: Larry Lile
539     Directory: /home/lile Shell: /usr/local/bin/bash
540     No Mail.
541     Mail forwarded to: lile@stdio.com
542     No Plan.
543 root 1.4
544 root 1.22 So let's write a little AnyEvent function that makes a finger request:
545 root 1.4
546     use AnyEvent;
547     use AnyEvent::Socket;
548    
549     sub finger($$) {
550     my ($user, $host) = @_;
551    
552     # use a condvar to return results
553     my $cv = AnyEvent->condvar;
554    
555     # first, connect to the host
556     tcp_connect $host, "finger", sub {
557 root 1.8 # the callback receives the socket handle - or nothing
558 root 1.4 my ($fh) = @_
559     or return $cv->send;
560    
561     # now write the username
562     syswrite $fh, "$user\015\012";
563    
564     my $response;
565    
566     # register a read watcher
567     my $read_watcher; $read_watcher = AnyEvent->io (
568     fh => $fh,
569     poll => "r",
570     cb => sub {
571     my $len = sysread $fh, $response, 1024, length $response;
572    
573     if ($len <= 0) {
574     # we are done, or an error occured, lets ignore the latter
575     undef $read_watcher; # no longer interested
576     $cv->send ($response); # send results
577     }
578     },
579     );
580     };
581    
582     # pass $cv to the caller
583     $cv
584     }
585    
586 root 1.11 That's a mouthful! Let's dissect this function a bit, first the overall
587     function and execution flow:
588 root 1.4
589     sub finger($$) {
590     my ($user, $host) = @_;
591    
592     # use a condvar to return results
593     my $cv = AnyEvent->condvar;
594    
595     # first, connect to the host
596     tcp_connect $host, "finger", sub {
597     ...
598     };
599    
600     $cv
601     }
602    
603 root 1.28 This isn't too complicated, just a function with two parameters that
604     creates a condition variable C<$cv>, initiates a TCP connect to
605     C<$host>, and returns C<$cv>. The caller can use the returned C<$cv> to
606     receive the finger response, but one could equally well pass a third
607     argument, a callback, to the function.
608 root 1.4
609 root 1.11 Since we are programming event'ish, we do not wait for the connect to
610     finish - it could block the program for a minute or longer!
611    
612 root 1.28 Instead, we pass C<tcp_connect> a callback to invoke when the connect is
613     done. The callback is called with the socket handle as its first
614     argument if the connect succeeds, and no arguments otherwise. The
615     important point is that it will always be called as soon as the outcome
616     of the TCP connect is known.
617 root 1.11
618     This style of programming is also called "continuation style": the
619 root 1.22 "continuation" is simply the way the program continues - normally at the
620     next line after some statement (the exception is loops or things like
621     C<return>). When we are interested in events, however, we instead specify
622     the "continuation" of our program by passing a closure, which makes that
623     closure the "continuation" of the program.
624    
625     The C<tcp_connect> call is like saying "return now, and when the
626 root 1.28 connection is established or the attempt failed, continue there".
627 root 1.4
628 root 1.11 Now let's look at the callback/closure in more detail:
629 root 1.4
630 root 1.11 # the callback receives the socket handle - or nothing
631 root 1.4 my ($fh) = @_
632     or return $cv->send;
633    
634 root 1.28 The first thing the callback does is to save the socket handle in
635 root 1.5 C<$fh>. When there was an error (no arguments), then our instinct as
636 root 1.11 expert Perl programmers would tell us to C<die>:
637 root 1.4
638     my ($fh) = @_
639     or die "$host: $!";
640 root 1.1
641 root 1.11 While this would give good feedback to the user (if he happens to watch
642     standard error), our program would probably stop working here, as we never
643     report the results to anybody, certainly not the caller of our C<finger>
644     function, and most event loops continue even after a C<die>!
645    
646     This is why we instead C<return>, but also call C<< $cv->send >> without
647     any arguments to signal to the condvar consumer that something bad has
648 root 1.22 happened. The return value of C<< $cv->send >> is irrelevant, as is
649 root 1.28 the return value of our callback. The C<return> statement is used for
650     the side effect of, well, returning immediately from the callback.
651     Checking for errors and handling them this way is very common, which is
652     why this compact idiom is so handy.
653 root 1.4
654     As the next step in the finger protocol, we send the username to the
655 root 1.22 finger daemon on the other side of our connection (the kernel.org finger
656     service doesn't actually wait for a username, but the net is running out
657     of finger servers fast):
658 root 1.4
659     syswrite $fh, "$user\015\012";
660    
661 root 1.11 Note that this isn't 100% clean socket programming - the socket could,
662     for whatever reasons, not accept our data. When writing a small amount
663     of data like in this example it doesn't matter, as a socket buffer is
664     almost always big enough for a mere "username", but for real-world
665     cases you might need to implement some kind of write buffering - or use
666     L<AnyEvent::Handle>, which handles these matters for you, as shown in the
667     next section.
668 root 1.4
669 root 1.28 What we I<do> have to do is implement our own read buffer - the response
670 root 1.4 data could arrive late or in multiple chunks, and we cannot just wait for
671     it (event-based programming, you know?).
672    
673     To do that, we register a read watcher on the socket which waits for data:
674    
675     my $read_watcher; $read_watcher = AnyEvent->io (
676     fh => $fh,
677     poll => "r",
678    
679     There is a trick here, however: the read watcher isn't stored in a global
680     variable, but in a local one - if the callback returns, it would normally
681     destroy the variable and its contents, which would in turn unregister our
682 root 1.5 watcher.
683 root 1.4
684 root 1.28 To avoid that, we refer to the watcher variable in the watcher callback.
685     This means that, when the C<tcp_connect> callback returns, perl thinks
686     (quite correctly) that the read watcher is still in use - namely inside
687     the inner callback - and thus keeps it alive even if nothing else in the
688     program refers to it anymore (it is much like Baron Münchhausen keeping
689     himself from dying by pulling himself out of a swamp).
690 root 1.4
691 root 1.11 The trick, however, is that instead of:
692    
693     my $read_watcher = AnyEvent->io (...
694    
695     The program does:
696    
697     my $read_watcher; $read_watcher = AnyEvent->io (...
698    
699     The reason for this is a quirk in the way Perl works: variable names
700     declared with C<my> are only visible in the I<next> statement. If the
701     whole C<< AnyEvent->io >> call, including the callback, would be done in
702     a single statement, the callback could not refer to the C<$read_watcher>
703 root 1.28 variable to C<undef>ine it, so it is done in two statements.
704 root 1.11
705 root 1.28 Whether you'd want to format it like this is of course a matter of style.
706     This way emphasizes that the declaration and assignment really are one
707 root 1.11 logical statement.
708    
709 root 1.4 The callback itself calls C<sysread> for as many times as necessary, until
710 root 1.11 C<sysread> returns either an error or end-of-file:
711 root 1.4
712     cb => sub {
713     my $len = sysread $fh, $response, 1024, length $response;
714    
715     if ($len <= 0) {
716    
717 root 1.28 Note that C<sysread> has the ability to append data it reads to a scalar
718     if we specify an offset, a feature which we make use of in this example.
719 root 1.4
720     When C<sysread> indicates we are done, the callback C<undef>ines
721 root 1.28 the watcher and then C<send>s the response data to the condition
722 root 1.4 variable. All this has the following effects:
723    
724     Undefining the watcher destroys it, as our callback was the only one still
725     having a reference to it. When the watcher gets destroyed, it destroys the
726     callback, which in turn means the C<$fh> handle is no longer used, so that
727     gets destroyed as well. The result is that all resources will be nicely
728     cleaned up by perl for us.
729    
730     =head3 Using the finger client
731    
732 root 1.5 Now, we could probably write the same finger client in a simpler way if
733     we used C<IO::Socket::INET>, ignored the problem of multiple hosts and
734     ignored IPv6 and a few other things that C<tcp_connect> handles for us.
735 root 1.4
736     But the main advantage is that we can not only run this finger function in
737     the background, we even can run multiple sessions in parallel, like this:
738    
739 root 1.32 my $f1 = finger "kuriyama", "freebsd.org";
740 root 1.33 my $f2 = finger "icculus?listarchives=1", "icculus.org";
741     my $f3 = finger "mikachu", "icculus.org";
742 root 1.4
743 root 1.33 print "kuriyama's gpg key\n" , $f1->recv, "\n";
744     print "icculus' plan archive\n" , $f2->recv, "\n";
745     print "mikachu's plan zomgn\n" , $f3->recv, "\n";
746 root 1.4
747     It doesn't look like it, but in fact all three requests run in
748 root 1.9 parallel. The code waits for the first finger request to finish first, but
749 root 1.11 that doesn't keep it from executing them parallel: when the first C<recv>
750     call sees that the data isn't ready yet, it serves events for all three
751     requests automatically, until the first request has finished.
752    
753     The second C<recv> call might either find the data is already there, or it
754     will continue handling events until that is the case, and so on.
755 root 1.9
756     By taking advantage of network latencies, which allows us to serve other
757     requests and events while we wait for an event on one socket, the overall
758 root 1.11 time to do these three requests will be greatly reduced, typically all
759 root 1.28 three are done in the same time as the slowest of the three requests.
760 root 1.5
761     By the way, you do not actually have to wait in the C<recv> method on an
762 root 1.11 AnyEvent condition variable - after all, waiting is evil - you can also
763     register a callback:
764 root 1.5
765 root 1.28 $f1->cb (sub {
766 root 1.5 my $response = shift->recv;
767     # ...
768     });
769    
770 root 1.28 The callback will be invoked only when C<send> is called. In fact,
771 root 1.5 instead of returning a condition variable you could also pass a third
772     parameter to your finger function, the callback to invoke with the
773     response:
774    
775     sub finger($$$) {
776     my ($user, $host, $cb) = @_;
777    
778 root 1.11 How you implement it is a matter of taste - if you expect your function to
779     be used mainly in an event-based program you would normally prefer to pass
780     a callback directly. If you write a module and expect your users to use
781     it "synchronously" often (for example, a simple http-get script would not
782     really care much for events), then you would use a condition variable and
783 root 1.22 tell them "simply C<< ->recv >> the data".
784 root 1.4
785 root 1.11 =head3 Problems with the implementation and how to fix them
786 root 1.4
787     To make this example more real-world-ready, we would not only implement
788 root 1.22 some write buffering (for the paranoid, or maybe denial-of-service aware
789     security expert), but we would also have to handle timeouts and maybe
790     protocol errors.
791 root 1.4
792 root 1.11 Doing this quickly gets unwieldy, which is why we introduce
793     L<AnyEvent::Handle> in the next section, which takes care of all these
794 root 1.28 details for you and lets you concentrate on the actual protocol.
795 root 1.11
796    
797     =head2 Implementing simple HTTP and HTTPS GET requests with AnyEvent::Handle
798    
799 root 1.22 The L<AnyEvent::Handle> module has been hyped quite a bit in this document
800     so far, so let's see what it really offers.
801 root 1.11
802     As finger is such a simple protocol, let's try something slightly more
803     complicated: HTTP/1.0.
804    
805     An HTTP GET request works by sending a single request line that indicates
806     what you want the server to do and the URI you want to act it on, followed
807     by as many "header" lines (C<Header: data>, same as e-mail headers) as
808 root 1.28 required for the request, followed by an empty line.
809 root 1.11
810     The response is formatted very similarly, first a line with the response
811     status, then again as many header lines as required, then an empty line,
812     followed by any data that the server might send.
813    
814     Again, let's try it out with C<telnet> (I condensed the output a bit - if
815     you want to see the full response, do it yourself).
816    
817     # telnet www.google.com 80
818     Trying 209.85.135.99...
819     Connected to www.google.com (209.85.135.99).
820     Escape character is '^]'.
821     GET /test HTTP/1.0
822    
823     HTTP/1.0 404 Not Found
824     Date: Mon, 02 Jun 2008 07:05:54 GMT
825     Content-Type: text/html; charset=UTF-8
826    
827     <html><head>
828     [...]
829     Connection closed by foreign host.
830    
831     The C<GET ...> and the empty line were entered manually, the rest of the
832 root 1.28 telnet output is google's response, in this case a C<404 not found> one.
833 root 1.11
834     So, here is how you would do it with C<AnyEvent::Handle>:
835    
836 root 1.12 sub http_get {
837     my ($host, $uri, $cb) = @_;
838    
839 root 1.24 # store results here
840     my ($response, $header, $body);
841    
842     my $handle; $handle = new AnyEvent::Handle
843     connect => [$host => 'http'],
844     on_error => sub {
845     $cb->("HTTP/1.0 500 $!");
846     $handle->destroy; # explicitly destroy handle
847     },
848     on_eof => sub {
849     $cb->($response, $header, $body);
850     $handle->destroy; # explicitly destroy handle
851     };
852 root 1.12
853 root 1.24 $handle->push_write ("GET $uri HTTP/1.0\015\012\015\012");
854 root 1.12
855 root 1.24 # now fetch response status line
856     $handle->push_read (line => sub {
857     my ($handle, $line) = @_;
858     $response = $line;
859     });
860 root 1.12
861 root 1.24 # then the headers
862     $handle->push_read (line => "\015\012\015\012", sub {
863     my ($handle, $line) = @_;
864     $header = $line;
865     });
866 root 1.12
867 root 1.24 # and finally handle any remaining data as body
868     $handle->on_read (sub {
869     $body .= $_[0]->rbuf;
870     $_[0]->rbuf = "";
871     });
872 root 1.12 }
873 root 1.11
874     And now let's go through it step by step. First, as usual, the overall
875     C<http_get> function structure:
876    
877     sub http_get {
878     my ($host, $uri, $cb) = @_;
879    
880 root 1.24 # store results here
881     my ($response, $header, $body);
882    
883     my $handle; $handle = new AnyEvent::Handle
884     ... create handle object
885    
886     ... push data to write
887    
888     ... push what to expect to read queue
889 root 1.11 }
890    
891     Unlike in the finger example, this time the caller has to pass a callback
892     to C<http_get>. Also, instead of passing a URL as one would expect, the
893     caller has to provide the hostname and URI - normally you would use the
894     C<URI> module to parse a URL and separate it into those parts, but that is
895     left to the inspired reader :)
896    
897 root 1.28 Since everything else is left to the caller, all C<http_get> does is
898 root 1.24 initiate the connection by creating the AnyEvent::Handle object (which
899 root 1.28 calls C<tcp_connect> for us) and leave everything else to its callback.
900 root 1.24
901     The handle object is created, unsurprisingly, by calling the C<new>
902     method of L<AnyEvent::Handle>:
903 root 1.11
904 root 1.24 my $handle; $handle = new AnyEvent::Handle
905     connect => [$host => 'http'],
906     on_error => sub {
907     $cb->("HTTP/1.0 500 $!");
908     $handle->destroy; # explicitly destroy handle
909     },
910     on_eof => sub {
911     $cb->($response, $header, $body);
912     $handle->destroy; # explicitly destroy handle
913     };
914 root 1.11
915 root 1.24 The C<connect> argument tells AnyEvent::Handle to call C<tcp_connect> for
916     the specified host and service/port.
917 root 1.11
918 root 1.24 The C<on_error> callback will be called on any unexpected error, such as a
919 root 1.28 refused connection, or unexpected end-of-file while reading headers.
920 root 1.11
921     Instead of having an extra mechanism to signal errors, connection errors
922     are signalled by crafting a special "response status line", like this:
923    
924     HTTP/1.0 500 Connection refused
925    
926     This means the caller cannot distinguish (easily) between
927     locally-generated errors and server errors, but it simplifies error
928     handling for the caller a lot.
929    
930 root 1.24 The error callback also destroys the handle explicitly, because we are not
931     interested in continuing after any errors. In AnyEvent::Handle callbacks
932     you have to call C<destroy> explicitly to destroy a handle. Outside of
933 root 1.28 those callbacks you can just forget the object reference and it will be
934 root 1.24 automatically cleaned up.
935    
936 root 1.28 Last but not least, we set an C<on_eof> callback that is called when the
937 root 1.24 other side indicates it has stopped writing data, which we will use to
938     gracefully shut down the handle and report the results. This callback is
939 root 1.28 only called when the read queue is empty - if the read queue expects
940     some data and the handle gets an EOF from the other side this will be an
941     error - after all, you did expect more to come.
942 root 1.11
943 root 1.24 If you wanted to write a server using AnyEvent::Handle, you would use
944     C<tcp_accept> and then create the AnyEvent::Handle with the C<fh>
945 root 1.11 argument.
946    
947     =head3 The write queue
948    
949     The next line sends the actual request:
950    
951 root 1.24 $handle->push_write ("GET $uri HTTP/1.0\015\012\015\012");
952 root 1.11
953     No headers will be sent (this is fine for simple requests), so the whole
954     request is just a single line followed by an empty line to signal the end
955     of the headers to the server.
956    
957     The more interesting question is why the method is called C<push_write>
958     and not just write. The reason is that you can I<always> add some write
959     data without blocking, and to do this, AnyEvent::Handle needs some write
960 root 1.28 queue internally - and C<push_write> pushes some data onto the end of
961     that queue, just like Perl's C<push> pushes data onto the end of an
962 root 1.22 array.
963 root 1.11
964     The deeper reason is that at some point in the future, there might
965     be C<unshift_write> as well, and in any case, we will shortly meet
966 root 1.22 C<push_read> and C<unshift_read>, and it's usually easiest to remember if
967 root 1.24 all those functions have some symmetry in their name. So C<push> is used
968     as the opposite of C<unshift> in AnyEvent::Handle, not as the opposite of
969     C<pull> - just like in Perl.
970    
971     Note that we call C<push_write> right after creating the AnyEvent::Handle
972     object, before it has had time to actually connect to the server. This is
973 root 1.28 fine, pushing the read and write requests will queue them in the handle
974     object until the connection has been established. Alternatively, we
975 root 1.24 could do this "on demand" in the C<on_connect> callback.
976 root 1.11
977 root 1.28 If C<push_write> is called with more than one argument, then you can do
978     I<formatted> I/O. For example, this would JSON-encode your data before
979     pushing it to the write queue:
980 root 1.11
981     $handle->push_write (json => [1, 2, 3]);
982    
983 root 1.28 This pretty much summarises the write queue, there is little else to it.
984 root 1.11
985 root 1.22 Reading the response is far more interesting, because it involves the more
986     powerful and complex I<read queue>:
987 root 1.11
988     =head3 The read queue
989    
990 root 1.22 The response consists of three parts: a single line with the response
991     status, a single paragraph of headers ended by an empty line, and the
992 root 1.28 request body, which is the remaining data on the connection.
993 root 1.11
994     For the first two, we push two read requests onto the read queue:
995    
996 root 1.24 # now fetch response status line
997     $handle->push_read (line => sub {
998     my ($handle, $line) = @_;
999     $response = $line;
1000     });
1001 root 1.11
1002 root 1.24 # then the headers
1003     $handle->push_read (line => "\015\012\015\012", sub {
1004     my ($handle, $line) = @_;
1005     $header = $line;
1006     });
1007 root 1.11
1008 root 1.28 While one can just push a single callback to parse all the data on the
1009     queue, formatted I/O really comes to our aid here, since there is a
1010     ready-made "read line" read type. The first read expects a single line,
1011     ended by C<\015\012> (the standard end-of-line marker in internet
1012 root 1.22 protocols).
1013 root 1.11
1014     The second "line" is actually a single paragraph - instead of reading it
1015     line by line we tell C<push_read> that the end-of-line marker is really
1016     C<\015\012\015\012>, which is an empty line. The result is that the whole
1017     header paragraph will be treated as a single line and read. The word
1018     "line" is interpreted very freely, much like Perl itself does it.
1019    
1020     Note that push read requests are pushed immediately after creating the
1021     handle object - since AnyEvent::Handle provides a queue we can push as
1022     many requests as we want, and AnyEvent::Handle will handle them in order.
1023    
1024     There is, however, no read type for "the remaining data". For that, we
1025     install our own C<on_read> callback:
1026    
1027 root 1.24 # and finally handle any remaining data as body
1028     $handle->on_read (sub {
1029     $body .= $_[0]->rbuf;
1030     $_[0]->rbuf = "";
1031     });
1032 root 1.11
1033     This callback is invoked every time data arrives and the read queue is
1034     empty - which in this example will only be the case when both response and
1035 root 1.12 header have been read. The C<on_read> callback could actually have been
1036     specified when constructing the object, but doing it this way preserves
1037     logical ordering.
1038 root 1.1
1039 root 1.28 The read callback adds the current read buffer to its C<$body>
1040 root 1.22 variable and, most importantly, I<empties> the buffer by assigning the
1041     empty string to it.
1042 root 1.1
1043 root 1.28 Given these instructions, AnyEvent::Handle will handle incoming data -
1044     if all goes well, the callback will be invoked with the response data;
1045     if not, it will get an error.
1046 root 1.1
1047 root 1.22 In general, you can implement pipelining (a semi-advanced feature of many
1048 root 1.28 protocols) very easily with AnyEvent::Handle: If you have a protocol
1049     with a request/response structure, your request methods/functions will
1050     all look like this (simplified):
1051 root 1.13
1052     sub request {
1053    
1054     # send the request to the server
1055     $handle->push_write (...);
1056    
1057     # push some response handlers
1058     $handle->push_read (...);
1059     }
1060    
1061 root 1.22 This means you can queue as many requests as you want, and while
1062     AnyEvent::Handle goes through its read queue to handle the response data,
1063     the other side can work on the next request - queueing the request just
1064     appends some data to the write queue and installs a handler to be called
1065     later.
1066    
1067     You might ask yourself how to handle decisions you can only make I<after>
1068     you have received some data (such as handling a short error response or a
1069     long and differently-formatted response). The answer to this problem is
1070     C<unshift_read>, which we will introduce together with an example in the
1071     coming sections.
1072 root 1.1
1073 root 1.22 =head3 Using C<http_get>
1074    
1075     Finally, here is how you would use C<http_get>:
1076 root 1.1
1077 root 1.12 http_get "www.google.com", "/", sub {
1078     my ($response, $header, $body) = @_;
1079 root 1.1
1080 root 1.12 print
1081     $response, "\n",
1082     $body;
1083     };
1084 root 1.1
1085 root 1.12 And of course, you can run as many of these requests in parallel as you
1086     want (and your memory supports).
1087 root 1.1
1088 root 1.13 =head3 HTTPS
1089    
1090     Now, as promised, let's implement the same thing for HTTPS, or more
1091     correctly, let's change our C<http_get> function into a function that
1092     speaks HTTPS instead.
1093    
1094 root 1.28 HTTPS is a standard TLS connection (B<T>ransport B<L>ayer
1095 root 1.13 B<S>ecurity is the official name for what most people refer to as C<SSL>)
1096 root 1.22 that contains standard HTTP protocol exchanges. The only other difference
1097     to HTTP is that by default it uses port C<443> instead of port C<80>.
1098 root 1.13
1099 root 1.22 To implement these two differences we need two tiny changes, first, in the
1100 root 1.24 C<connect> parameter, we replace C<http> by C<https> to connect to the
1101     https port:
1102 root 1.13
1103 root 1.24 connect => [$host => 'https'],
1104 root 1.13
1105     The other change deals with TLS, which is something L<AnyEvent::Handle>
1106 root 1.28 does for us if the L<Net::SSLeay> module is available. To enable TLS
1107     with L<AnyEvent::Handle>, we pass an additional C<tls> parameter
1108     to the call to C<AnyEvent::Handle::new>:
1109 root 1.13
1110     tls => "connect",
1111    
1112     Specifying C<tls> enables TLS, and the argument specifies whether
1113     AnyEvent::Handle is the server side ("accept") or the client side
1114     ("connect") for the TLS connection, as unlike TCP, there is a clear
1115     server/client relationship in TLS.
1116    
1117 root 1.14 That's all.
1118    
1119 root 1.22 Of course, all this should be handled transparently by C<http_get>
1120     after parsing the URL. If you need this, see the part about exercising
1121     your inspiration earlier in this document. You could also use the
1122     L<AnyEvent::HTTP> module from CPAN, which implements all this and works
1123 root 1.28 around a lot of quirks for you too.
1124 root 1.13
1125 root 1.12 =head3 The read queue - revisited
1126 root 1.1
1127 root 1.13 HTTP always uses the same structure in its responses, but many protocols
1128 root 1.22 require parsing responses differently depending on the response itself.
1129 root 1.13
1130     For example, in SMTP, you normally get a single response line:
1131    
1132     220 mail.example.net Neverusesendmail 8.8.8 <mailme@example.net>
1133    
1134     But SMTP also supports multi-line responses:
1135    
1136     220-mail.example.net Neverusesendmail 8.8.8 <mailme@example.net>
1137     220-hey guys
1138     220 my response is longer than yours
1139    
1140 root 1.28 To handle this, we need C<unshift_read>. As the name (we hope) implies,
1141 root 1.22 C<unshift_read> will not append your read request to the end of the read
1142 root 1.28 queue, but will prepend it to the queue instead.
1143 root 1.13
1144 root 1.22 This is useful in the situation above: Just push your response-line read
1145 root 1.13 request when sending the SMTP command, and when handling it, you look at
1146 root 1.22 the line to see if more is to come, and C<unshift_read> another reader
1147     callback if required, like this:
1148 root 1.13
1149     my $response; # response lines end up in here
1150    
1151     my $read_response; $read_response = sub {
1152     my ($handle, $line) = @_;
1153    
1154     $response .= "$line\n";
1155    
1156     # check for continuation lines ("-" as 4th character")
1157     if ($line =~ /^...-/) {
1158     # if yes, then unshift another line read
1159     $handle->unshift_read (line => $read_response);
1160    
1161     } else {
1162     # otherwise we are done
1163    
1164     # free callback
1165     undef $read_response;
1166    
1167     print "we are don reading: $response\n";
1168     }
1169     };
1170    
1171     $handle->push_read (line => $read_response);
1172 root 1.1
1173 root 1.13 This recipe can be used for all similar parsing problems, for example in
1174     NNTP, the response code to some commands indicates that more data will be
1175 root 1.14 sent:
1176    
1177     $handle->push_write ("article 42");
1178    
1179     # read response line
1180     $handle->push_read (line => sub {
1181     my ($handle, $status) = @_;
1182    
1183     # article data following?
1184     if ($status =~ /^2/) {
1185     # yes, read article body
1186    
1187     $handle->unshift_read (line => "\012.\015\012", sub {
1188     my ($handle, $body) = @_;
1189    
1190     $finish->($status, $body);
1191     });
1192    
1193     } else {
1194     # some error occured, no article data
1195    
1196     $finish->($status);
1197     }
1198     }
1199    
1200     =head3 Your own read queue handler
1201    
1202 root 1.28 Sometimes your protocol doesn't play nice, and uses lines or chunks of
1203     data not formatted in a way handled out of the box by AnyEvent::Handle.
1204     In this case you have to implement your own read parser.
1205 root 1.14
1206     To make up a contorted example, imagine you are looking for an even
1207     number of characters followed by a colon (":"). Also imagine that
1208 root 1.28 AnyEvent::Handle has no C<regex> read type which could be used, so you'd
1209     have to do it manually.
1210 root 1.14
1211 root 1.22 To implement a read handler for this, you would C<push_read> (or
1212 root 1.28 C<unshift_read>) a single code reference.
1213 root 1.14
1214     This code reference will then be called each time there is (new) data
1215 root 1.22 available in the read buffer, and is expected to either successfully
1216     eat/consume some of that data (and return true) or to return false to
1217     indicate that it wants to be called again.
1218    
1219     If the code reference returns true, then it will be removed from the
1220     read queue (because it has parsed/consumed whatever it was supposed to
1221     consume), otherwise it stays in the front of it.
1222 root 1.14
1223     The example above could be coded like this:
1224    
1225     $handle->push_read (sub {
1226     my ($handle) = @_;
1227    
1228     # check for even number of characters + ":"
1229     # and remove the data if a match is found.
1230     # if not, return false (actually nothing)
1231    
1232     $handle->{rbuf} =~ s/^( (?:..)* ) ://x
1233     or return;
1234    
1235     # we got some data in $1, pass it to whoever wants it
1236     $finish->($1);
1237    
1238     # and return true to indicate we are done
1239     1
1240     });
1241    
1242 root 1.31
1243     =head1 Debugging aids
1244    
1245     Now that you have seen how to use AnyEvent, here's what to use when you
1246     don't use it correctly, or simply hit a bug somewhere and want to debug
1247     it:
1248    
1249     =over 4
1250    
1251     =item Enable strict argument checking during development
1252    
1253     AnyEvent does not, by default, do any argument checking. This can lead to
1254     strange and unexpected results especially if you are just trying to find
1255     your way with AnyEvent.
1256    
1257     AnyEvent supports a special "strict" mode - off by default - which does
1258     very strict argument checking, at the expense of slowing down your
1259     program. During development, however, this mode is very useful because it
1260     quickly catches the msot common errors.
1261    
1262     You can enable this strict mode either by having an environment variable
1263     C<AE_STRICT> with a true value in your environment:
1264    
1265     AE_STRICT=1 perl myprog
1266    
1267     Or you can write C<use AnyEvent::Strict> in your program, which has the
1268     same effect (do not do this in production, however).
1269    
1270     =item Increase verbosity, configure logging
1271    
1272     AnyEvent, by default, only logs critical messages. If something doesn't
1273     work, maybe there was a warning about it that you didn't see because it
1274     was suppressed.
1275    
1276     So during development it is recommended to push up the logging level to at
1277     least warn level (C<5>):
1278    
1279     AE_VERBOSE=5 perl myprog
1280    
1281     Other levels that might be helpful are debug (C<8>) or even trace (C<9>).
1282    
1283     AnyEvent's logging is quite versatile - the L<AnyEvent::Log> manpage has
1284     all the details.
1285    
1286     =item Watcher wrapping, tracing, the shell
1287    
1288     For even more debugging, you can enable watcher wrapping:
1289    
1290     AE_DEBUG_WRAP=2 perl myprog
1291    
1292     This will have the effect of wrapping every watcher into a special object
1293     that stores a backtrace of when it was created, stores a backtrace
1294     when an exception occurs during watcher execution, and stores a lot
1295     of other information. If that slows down your program too much, then
1296     C<AE_DEBUG_WRAP=1> avoids the costly backtraces.
1297    
1298     Here is an example of what of information is stored:
1299    
1300     59148536 DC::DB:472(Server::run)>io>DC::DB::Server::fh_read
1301     type: io watcher
1302     args: poll r fh GLOB(0x35283f0)
1303     created: 2011-09-01 23:13:46.597336 +0200 (1314911626.59734)
1304     file: ./blib/lib/Deliantra/Client/private/DC/DB.pm
1305     line: 472
1306     subname: DC::DB::Server::run
1307     context:
1308     tracing: enabled
1309     cb: CODE(0x2d1fb98) (DC::DB::Server::fh_read)
1310     invoked: 0 times
1311     created
1312     (eval 25) line 6 AnyEvent::Debug::Wrap::__ANON__('AnyEvent','fh',GLOB(0x35283f0),'poll','r','cb',CODE(0x2d1fb98)=DC::DB::Server::fh_read)
1313     DC::DB line 472 AE::io(GLOB(0x35283f0),'0',CODE(0x2d1fb98)=DC::DB::Server::fh_read)
1314     bin/deliantra line 2776 DC::DB::Server::run()
1315     bin/deliantra line 2941 main::main()
1316    
1317     There are many ways to get at this data - see the L<AnyEvent::Debug> and
1318     L<AnyEvent::Log> manpages for more details.
1319    
1320     The most interesting and interactive way is to create a debug shell, for
1321     example by setting C<AE_DEBUG_SHELL>:
1322    
1323     AE_DEBUG_WRAP=2 AE_DEBUG_SHELL=$HOME/myshell ./myprog
1324    
1325     # while myprog is running:
1326     socat readline $HOME/myshell
1327    
1328     Note that anybody who can access F<$HOME/myshell> can make your program
1329     do anything he or she wants, so if you are not the only user on your
1330     machine, better put it into a secure location (F<$HOME> might not be
1331     secure enough).
1332    
1333     If you don't have C<socat> (a shame!) and care even less about security,
1334     you can also use TCP and C<telnet>:
1335    
1336     AE_DEBUG_WRAP=2 AE_DEBUG_SHELL=127.0.0.1:1234 ./myprog
1337    
1338     telnet 127.0.0.1 1234
1339    
1340     The debug shell can enable and disable tracing of watcher invocations,
1341     can display the trace output, give you a list of watchers and lets you
1342     investigate watchers in detail.
1343    
1344     =back
1345    
1346 root 1.22 This concludes our little tutorial.
1347    
1348 root 1.31
1349 root 1.22 =head1 Where to go from here?
1350    
1351 root 1.23 This introduction should have explained the key concepts of L<AnyEvent>
1352     - event watchers and condition variables, L<AnyEvent::Socket> - basic
1353     networking utilities, and L<AnyEvent::Handle> - a nice wrapper around
1354 root 1.28 sockets.
1355 root 1.22
1356     You could either start coding stuff right away, look at those manual
1357     pages for the gory details, or roam CPAN for other AnyEvent modules (such
1358     as L<AnyEvent::IRC> or L<AnyEvent::HTTP>) to see more code examples (or
1359     simply to use them).
1360    
1361     If you need a protocol that doesn't have an implementation using AnyEvent,
1362     remember that you can mix AnyEvent with one other event framework, such as
1363     L<POE>, so you can always use AnyEvent for your own tasks plus modules of
1364     one other event framework to fill any gaps.
1365    
1366     And last not least, you could also look at L<Coro>, especially
1367     L<Coro::AnyEvent>, to see how you can turn event-based programming from
1368     callback style back to the usual imperative style (also called "inversion
1369     of control" - AnyEvent calls I<you>, but Coro lets I<you> call AnyEvent).
1370 root 1.1
1371 root 1.15 =head1 Authors
1372 root 1.6
1373     Robin Redeker C<< <elmex at ta-sa.org> >>, Marc Lehmann <schmorp@schmorp.de>.
1374