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.36 by root, Sat Nov 30 17:41:46 2013 UTC vs.
Revision 1.37 by root, Thu May 12 16:43:08 2016 UTC

463outstanding requests. It's ignored by the synchronous backend. 463outstanding requests. It's ignored by the synchronous backend.
464 464
465By overriding this you can prolong the life of a RPC process after e.g. 465By overriding this you can prolong the life of a RPC process after e.g.
466the parent has exited by running the event loop in the provided function 466the parent has exited by running the event loop in the provided function
467(or simply calling it, for example, when your child process uses L<EV> you 467(or simply calling it, for example, when your child process uses L<EV> you
468could provide L<EV::loop> as C<done> function). 468could provide L<EV::run> as C<done> function).
469 469
470Of course, in that case you are responsible for exiting at the appropriate 470Of course, in that case you are responsible for exiting at the appropriate
471time and not returning from 471time and not returning from
472 472
473=item async => $boolean (default: 0) 473=item async => $boolean (default: 0)
514Here are some examples - some of them are also available as global 514Here are some examples - some of them are also available as global
515variables that make them easier to use. 515variables that make them easier to use.
516 516
517=over 4 517=over 4
518 518
519=item octet strings - C<$AnyEvent::Fork::RPC::STRING_SERIALISER> 519=item C<$AnyEvent::Fork::RPC::STRING_SERIALISER> - octet strings only
520 520
521This serialiser concatenates length-prefixes octet strings, and is the 521This serialiser (currently the default) concatenates length-prefixes octet
522default. That means you can only pass (and return) strings containing 522strings, and is the default. That means you can only pass (and return)
523character codes 0-255. 523strings containing character codes 0-255.
524
525The main advantages of this serialiser are the high speed and that it
526doesn't need another module. The main disadvantage is that you are very
527limited in what you can pass - only octet strings.
524 528
525Implementation: 529Implementation:
526 530
527 ( 531 (
528 sub { pack "(w/a*)*", @_ }, 532 sub { pack "(w/a*)*", @_ },
529 sub { unpack "(w/a*)*", shift } 533 sub { unpack "(w/a*)*", shift }
530 ) 534 )
531 535
532=item cbor - C<$AnyEvent::Fork::RPC::CBOR_XS_SERIALISER> 536=item C<$AnyEvent::Fork::RPC::CBOR_XS_SERIALISER> - uses L<CBOR::XS>
533 537
534This serialiser creates CBOR::XS arrays - you have to make sure the 538This serialiser creates CBOR::XS arrays - you have to make sure the
535L<CBOR::XS> module is installed for this serialiser to work. It can be 539L<CBOR::XS> module is installed for this serialiser to work. It can be
536beneficial for sharing when you preload the L<CBOR::XS> module in a template 540beneficial for sharing when you preload the L<CBOR::XS> module in a template
537process. 541process.
550 ( 554 (
551 sub { CBOR::XS::encode_cbor_sharing \@_ }, 555 sub { CBOR::XS::encode_cbor_sharing \@_ },
552 sub { @{ CBOR::XS::decode_cbor shift } } 556 sub { @{ CBOR::XS::decode_cbor shift } }
553 ) 557 )
554 558
555=item json - C<$AnyEvent::Fork::RPC::JSON_SERIALISER> 559=item C<$AnyEvent::Fork::RPC::JSON_SERIALISER> - uses L<JSON::XS> or L<JSON>
556 560
557This serialiser creates JSON arrays - you have to make sure the L<JSON> 561This serialiser creates JSON arrays - you have to make sure the L<JSON>
558module is installed for this serialiser to work. It can be beneficial for 562module is installed for this serialiser to work. It can be beneficial for
559sharing when you preload the L<JSON> module in a template process. 563sharing when you preload the L<JSON> module in a template process.
560 564
568 ( 572 (
569 sub { JSON::encode_json \@_ }, 573 sub { JSON::encode_json \@_ },
570 sub { @{ JSON::decode_json shift } } 574 sub { @{ JSON::decode_json shift } }
571 ) 575 )
572 576
573=item storable - C<$AnyEvent::Fork::RPC::STORABLE_SERIALISER> 577=item C<$AnyEvent::Fork::RPC::STORABLE_SERIALISER> - L<Storable>
574 578
575This serialiser uses L<Storable>, which means it has high chance of 579This serialiser uses L<Storable>, which means it has high chance of
576serialising just about anything you throw at it, at the cost of having 580serialising just about anything you throw at it, at the cost of having
577very high overhead per operation. It also comes with perl. It should be 581very high overhead per operation. It also comes with perl. It should be
578used when you need to serialise complex data structures. 582used when you need to serialise complex data structures.
583 ( 587 (
584 sub { Storable::freeze \@_ }, 588 sub { Storable::freeze \@_ },
585 sub { @{ Storable::thaw shift } } 589 sub { @{ Storable::thaw shift } }
586 ) 590 )
587 591
588=item portable storable - C<$AnyEvent::Fork::RPC::NSTORABLE_SERIALISER> 592=item C<$AnyEvent::Fork::RPC::NSTORABLE_SERIALISER> - portable Storable
589 593
590This serialiser also uses L<Storable>, but uses it's "network" format 594This serialiser also uses L<Storable>, but uses it's "network" format
591to serialise data, which makes it possible to talk to different 595to serialise data, which makes it possible to talk to different
592perl binaries (for example, when talking to a process created with 596perl binaries (for example, when talking to a process created with
593L<AnyEvent::Fork::Remote>). 597L<AnyEvent::Fork::Remote>).
893are queued and the jobs are slow, they will all run concurrently. The 897are queued and the jobs are slow, they will all run concurrently. The
894child must implement some queueing/limiting mechanism if this causes 898child must implement some queueing/limiting mechanism if this causes
895problems. Alternatively, the parent could limit the amount of rpc calls 899problems. Alternatively, the parent could limit the amount of rpc calls
896that are outstanding. 900that are outstanding.
897 901
898Blocking use of condvars is not supported. 902Blocking use of condvars is not supported (in the main thread, outside of
903e.g. L<Coro> threads).
899 904
900Using event-based modules such as L<IO::AIO>, L<Gtk2>, L<Tk> and so on is 905Using event-based modules such as L<IO::AIO>, L<Gtk2>, L<Tk> and so on is
901easy. 906easy.
902 907
903=back 908=back
969gory details. 974gory details.
970 975
971=head1 EXCEPTIONS 976=head1 EXCEPTIONS
972 977
973There are no provisions whatsoever for catching exceptions at this time - 978There are no provisions whatsoever for catching exceptions at this time -
974in the child, exeptions might kill the process, causing calls to be lost 979in the child, exceptions might kill the process, causing calls to be lost
975and the parent encountering a fatal error. In the parent, exceptions in 980and the parent encountering a fatal error. In the parent, exceptions in
976the result callback will not be caught and cause undefined behaviour. 981the result callback will not be caught and cause undefined behaviour.
977 982
978=head1 SEE ALSO 983=head1 SEE ALSO
979 984

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines