Difference between revisions of "Perl POE"
From Teknologisk videncenter
m (→A simple multitasking TCP Server) |
m (→Timing the lifespan of a session) |
||
(7 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
= POE Networking = | = POE Networking = | ||
==A simple multitasking TCP Server == | ==A simple multitasking TCP Server == | ||
− | This server is doing nothing useful, but are showing how to establish the server and control client connections. When Client connects they connect at line 14 and the server send a Greeting to the client. If the client send information to the server it is received in th '''ClientInput''' subroutine in line 18. If the Client sends '''Get orders''' it receives the content of hash ''' | + | This server is doing nothing useful, but are showing how to establish the server and control client connections. When Client connects they connect at line 14 and the server send a Greeting to the client. If the client send information to the server it is received in th '''ClientInput''' subroutine in line 18. If the Client sends '''Get orders''' it receives the content of hash '''clientorder''' |
+ | |||
+ | {| | ||
<source lang="perl" line> | <source lang="perl" line> | ||
#!/usr/bin/perl | #!/usr/bin/perl | ||
Line 8: | Line 10: | ||
use strict; | use strict; | ||
use POE qw(Component::Server::TCP); | use POE qw(Component::Server::TCP); | ||
− | |||
print "LMS"; | print "LMS"; | ||
my %clientorder = ( "LCnumber" => 7, | my %clientorder = ( "LCnumber" => 7, | ||
Line 38: | Line 39: | ||
exit; | exit; | ||
</source> | </source> | ||
+ | |} | ||
== A simple TCP Client == | == A simple TCP Client == | ||
Line 48: | Line 50: | ||
( RemoteAddress => "192.168.1.100", | ( RemoteAddress => "192.168.1.100", | ||
RemotePort => "1234", | RemotePort => "1234", | ||
+ | ConnectTimeout => 5, | ||
+ | ConnectError => sub { | ||
+ | print "Reconecting..\n"; | ||
+ | $_[KERNEL]->delay( reconnect => 5 ); | ||
+ | }, | ||
ServerInput => sub { | ServerInput => sub { | ||
my $input = $_[ARG0]; | my $input = $_[ARG0]; | ||
Line 66: | Line 73: | ||
sub _start_handler { | sub _start_handler { | ||
$_[HEAP]{ts_start} = time(); | $_[HEAP]{ts_start} = time(); | ||
− | + | } | |
− | + | ||
+ | sub _stop_handler { | ||
my $time_elapsed = time() - $_[HEAP]{ts_start}; | my $time_elapsed = time() - $_[HEAP]{ts_start}; | ||
print "Session ", $_[SESSION]->ID, " elapsed seconds: $elapsed\n"; | print "Session ", $_[SESSION]->ID, " elapsed seconds: $elapsed\n"; | ||
− | + | } | |
</source> | </source> | ||
Latest revision as of 12:42, 28 June 2009
Contents
POE - portable multitasking and networking framework for Perl
POE Networking
A simple multitasking TCP Server
This server is doing nothing useful, but are showing how to establish the server and control client connections. When Client connects they connect at line 14 and the server send a Greeting to the client. If the client send information to the server it is received in th ClientInput subroutine in line 18. If the Client sends Get orders it receives the content of hash clientorder
A simple TCP Client
#!/usr/bin/perl -w
use strict;
use POE qw(Component::Client::TCP);
POE::Component::Client::TCP->new
( RemoteAddress => "192.168.1.100",
RemotePort => "1234",
ConnectTimeout => 5,
ConnectError => sub {
print "Reconecting..\n";
$_[KERNEL]->delay( reconnect => 5 );
},
ServerInput => sub {
my $input = $_[ARG0];
if ($input =~ "Greetings from LMS") {
$_[HEAP]{server}->put("Get orders");
} else {
print "received: ", $input,"\n";
}
}
);
POE::Kernel->run();
exit;
Timing the lifespan of a session
sub _start_handler {
$_[HEAP]{ts_start} = time();
}
sub _stop_handler {
my $time_elapsed = time() - $_[HEAP]{ts_start};
print "Session ", $_[SESSION]->ID, " elapsed seconds: $elapsed\n";
}