… | |
… | |
175 | you really I<are> done. |
175 | you really I<are> done. |
176 | |
176 | |
177 | =head2 Example 2: Asynchronous Backend |
177 | =head2 Example 2: Asynchronous Backend |
178 | |
178 | |
179 | This example implements multiple count-downs in the child, using |
179 | This example implements multiple count-downs in the child, using |
180 | L<AnyEvent> timers. While this is a bit silly (one could use timers in te |
180 | L<AnyEvent> timers. While this is a bit silly (one could use timers in the |
181 | parent just as well), it illustrates the ability to use AnyEvent in the |
181 | parent just as well), it illustrates the ability to use AnyEvent in the |
182 | child and the fact that responses can arrive in a different order then the |
182 | child and the fact that responses can arrive in a different order then the |
183 | requests. |
183 | requests. |
184 | |
184 | |
185 | It also shows how to embed the actual child code into a C<__DATA__> |
185 | It also shows how to embed the actual child code into a C<__DATA__> |
… | |
… | |
786 | |
786 | |
787 | For the asynchronous backend, things are more complicated: Whenever it |
787 | For the asynchronous backend, things are more complicated: Whenever it |
788 | listens for another request by the parent, it might detect that the socket |
788 | listens for another request by the parent, it might detect that the socket |
789 | was closed (e.g. because the parent exited). It will sotp listening for |
789 | was closed (e.g. because the parent exited). It will sotp listening for |
790 | new requests and instead try to write out any remaining data (if any) or |
790 | new requests and instead try to write out any remaining data (if any) or |
791 | simply check whether the socket cna be written to. After this, the RPC |
791 | simply check whether the socket can be written to. After this, the RPC |
792 | process is effectively done - no new requests are incoming, no outstanding |
792 | process is effectively done - no new requests are incoming, no outstanding |
793 | request data can be written back. |
793 | request data can be written back. |
794 | |
794 | |
795 | Since chances are high that there are event watchers that the RPC server |
795 | Since chances are high that there are event watchers that the RPC server |
796 | knows nothing about (why else would one use the async backend if not for |
796 | knows nothing about (why else would one use the async backend if not for |