… | |
… | |
335 | |
335 | |
336 | $rpc->(add => 1, 3, Coro::rouse_cb); say Coro::rouse_wait; |
336 | $rpc->(add => 1, 3, Coro::rouse_cb); say Coro::rouse_wait; |
337 | $rpc->(mul => 3, 2, Coro::rouse_cb); say Coro::rouse_wait; |
337 | $rpc->(mul => 3, 2, Coro::rouse_cb); say Coro::rouse_wait; |
338 | |
338 | |
339 | The C<say>'s will print C<4> and C<6>. |
339 | The C<say>'s will print C<4> and C<6>. |
|
|
340 | |
|
|
341 | =head2 Example 4: Forward AnyEvent::Log messages using C<on_event> |
|
|
342 | |
|
|
343 | This partial example shows how to use the C<event> function to forward |
|
|
344 | L<AnyEvent::Log> messages to the parent. |
|
|
345 | |
|
|
346 | For this, the parent needs to provide a suitable C<on_event>: |
|
|
347 | |
|
|
348 | ->AnyEvent::Fork::RPC::run ( |
|
|
349 | on_event => sub { |
|
|
350 | if ($_[0] eq "ae_log") { |
|
|
351 | my (undef, $level, $message) = @_; |
|
|
352 | AE::log $level, $message; |
|
|
353 | } else { |
|
|
354 | # other event types |
|
|
355 | } |
|
|
356 | }, |
|
|
357 | ) |
|
|
358 | |
|
|
359 | In the child, as early as possible, the following code should reconfigure |
|
|
360 | L<AnyEvent::Log> to log via C<AnyEvent::Fork::RPC::event>: |
|
|
361 | |
|
|
362 | $AnyEvent::Log::LOG->log_cb (sub { |
|
|
363 | my ($timestamp, $orig_ctx, $level, $message) = @{+shift}; |
|
|
364 | |
|
|
365 | if (defined &AnyEvent::Fork::RPC::event) { |
|
|
366 | AnyEvent::Fork::RPC::event (ae_log => $level, $message); |
|
|
367 | } else { |
|
|
368 | warn "[$$ before init] $message\n"; |
|
|
369 | } |
|
|
370 | }); |
|
|
371 | |
|
|
372 | There is an important twist - the C<AnyEvent::Fork::RPC::event> function |
|
|
373 | is only defined when the child is fully initialised. If you redirect the |
|
|
374 | log messages in your C<init> function for example, then the C<event> |
|
|
375 | function might not yet be available. This is why the log callback checks |
|
|
376 | whether the fucntion is there using C<defined>, and only then uses it to |
|
|
377 | log the message. |
340 | |
378 | |
341 | =head1 PARENT PROCESS USAGE |
379 | =head1 PARENT PROCESS USAGE |
342 | |
380 | |
343 | This module exports nothing, and only implements a single function: |
381 | This module exports nothing, and only implements a single function: |
344 | |
382 | |