# create postback my $postback = $_[SESSION]->postback("status"); $kernel->post( 'IKC', 'post', 'poe://Server/ServerTest/compute', {value=>$value, postback=>$postback} ); #### #!/var/bin/perl use warnings; use strict; use POE qw(Component::IKC::Server); use Data::Dumper::Simple; POE::Component::IKC::Server->spawn( port =>'12345', name => 'Server', ); POE::Session->create( inline_states => { _start => \&start, compute => \&compute, finish => \&finish, _stop => \&stop, }, ); print "$$: Running server...\n"; POE::Kernel->run(); print "$$: Server exited...\n"; exit(); sub start { my ($kernel) = $_[KERNEL]; my $service_name = 'ServerTest'; $kernel->alias_set($service_name); $kernel->post( IKC => publish => $service_name, ['compute'] ); return; } sub compute { my ($kernel, $arg) = @_[KERNEL, ARG0]; my $sender_id = $_[SENDER]->ID; print "\n\t sub compute ", $arg; $kernel->refcount_increment( $sender_id, 'MYREFCOUNT' ); $kernel->yield( 'finish', $arg+1, $sender_id ); return; } sub finish { my ($kernel, $arg, $sender_id ) = @_[KERNEL, ARG0, ARG1]; print "\n\t sub finish ", $arg, "\n"; $kernel->post($sender_id, 'status', $arg); $kernel->refcount_decrement( $sender_id, 'MYREFCOUNT' ); return; } sub stop { my ( $kernel ) = $_[KERNEL]; print "\n STOP \n"; $kernel->alias_remove('ServerTest'); } #### #!/var/bin/perl use warnings; use strict; use POE; use POE qw(Component::IKC::Client); use Data::Dumper::Simple; POE::Component::IKC::Client->spawn( port =>'12345', name=>"Client$$", on_connect=>\&create_sessions, ); sub create_sessions { POE::Session->create( inline_states => { _start => \&start, execute => \&execute, status => \&status, _stop => \&stop, }, ); } print "$$: Running client...\n"; POE::Kernel->run(); print "$$: Client exited...\n"; exit(); sub start { my ( $kernel, $session ) = @_[ KERNEL, SESSION ]; my $service_name = 'ClientTest'; $kernel->alias_set($service_name); $kernel->post( IKC => publish => $service_name, ['status'] ); $kernel->yield( 'execute' ); return; } sub execute { my ( $kernel, $session ) = @_[ KERNEL, SESSION ]; my $value = 0; $value = $_[ARG0] unless (! defined $_[ARG0]); print "\n\t sub execute... $value"; $kernel->post( 'IKC', 'post', 'poe://Server/ServerTest/compute', $value ); return; } sub status { my ($kernel) = $_[KERNEL]; print "\n\t sub status... ", $_[ARG0], "\n"; sleep(1); $kernel->yield('execute', $_[ARG0]); return; } sub stop { my ( $kernel ) = $_[KERNEL]; print "\n STOP \n"; $kernel->alias_remove('ClientTest'); }