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

Comparing AnyEvent-Fork-RPC/RPC.pm (file contents):
Revision 1.9 by root, Wed Apr 17 21:48:35 2013 UTC vs.
Revision 1.10 by root, Wed Apr 17 22:04:49 2013 UTC

39Loading this module also always loads L<AnyEvent::Fork>, so you can make a 39Loading this module also always loads L<AnyEvent::Fork>, so you can make a
40separate C<use AnyEvent::Fork> if you wish, but you don't have to. 40separate C<use AnyEvent::Fork> if you wish, but you don't have to.
41 41
42=head1 EXAMPLES 42=head1 EXAMPLES
43 43
44=head2 Synchronous Backend 44=head2 Example 1: Synchronous Backend
45 45
46Here is a simple example that implements a backend that executes C<unlink> 46Here is a simple example that implements a backend that executes C<unlink>
47and C<rmdir> calls, and reports their status back. It also reports the 47and C<rmdir> calls, and reports their status back. It also reports the
48number of requests it has processed every three requests, which is clearly 48number of requests it has processed every three requests, which is clearly
49silly, but illustrates the use of events. 49silly, but illustrates the use of events.
136ensures that perl will correctly interpret calls to it. 136ensures that perl will correctly interpret calls to it.
137 137
138And as a final remark, there is a fine module on CPAN that can 138And as a final remark, there is a fine module on CPAN that can
139asynchronously C<rmdir> and C<unlink> and a lot more, and more efficiently 139asynchronously C<rmdir> and C<unlink> and a lot more, and more efficiently
140than this example, namely L<IO::AIO>. 140than this example, namely L<IO::AIO>.
141
142=head3 Example 1a: the same with the asynchronous backend
143
144This example only shows what needs to be changed to use the async backend
145instead. Doing this is not very useful, the purpose of this example is
146to show the minimum amount of change that is required to go from the
147synchronous to the asynchronous backend.
148
149To use the async backend in the previous example, you need to add the
150C<async> parameter to the C<AnyEvent::Fork::RPC::run> call:
151
152 ->AnyEvent::Fork::RPC::run ("MyWorker::run",
153 async => 1,
154 ...
155
156And since the function call protocol is now changed, you need to adopt
157C<MyWorker::run> to the async API.
158
159First, you need to accept the extra initial C<$done> callback:
160
161 sub run {
162 my ($done, $cmd, $path) = @_;
163
164And since a response is now generated when C<$done> is called, as opposed
165to when the function returns, we need to call the C<$done> function with
166the status:
167
168 $done->($status or (0, "$!"));
169
170A few remarks are in order. First, it's quite pointless to use the async
171backend for this example - but it I<is> possible. Second, you can call
172C<$done> before or after returning from the function. Third, having both
173returned from the function and having called the C<$done> callback, the
174child process may exit at any time, so you should call C<$done> only when
175you really I<are> done.
176
177=head2 Example 2: Asynchronous Backend
178
179#TODO
141 180
142=head1 PARENT PROCESS USAGE 181=head1 PARENT PROCESS USAGE
143 182
144This module exports nothing, and only implements a single function: 183This module exports nothing, and only implements a single function:
145 184

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines