use strict;
use warnings;
use Time::HiRes qw( gettimeofday usleep );
use Socket;
my $server_port = 3000;
# make the socket
socket(Server, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
# so we can restart our server quickly
setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, 1);
# build up my socket address
my $my_addr = sockaddr_in($server_port, INADDR_ANY);
bind(Server, $my_addr)
or die "Couldn't bind to port $server_port: $!\n";
# establish a queue for incoming connections
# print SOMAXCONN, "\n";
listen(Server, SOMAXCONN)
or die "Couldn't listen on port $server_port: $!\n";
while ( 1 )
{ my $WorkName = "FBServer"; my $cnt = 0; my $result = "";
while ( 1 )
{ $cnt++;
my $client;
$0 = "$WorkName: Waiting for work!";
accept( $client, Server );
if ( defined $client )
{
my $tm = substr(scalar localtime(),4,15);
$0 = "$WorkName: Working ( $cnt ) $tm";
my $stime = gettimeofday; my $html = ""; my $Todo = ""; my $size = 0;
$0 = "$WorkName: Read Socket ( $cnt ) $tm";
eval
{ while (<$client>)
{ $Todo .= "$_"; chomp($Todo); }
};
if ( $@ )
{ my $err = $@;
print $client "$err\n";
syslog('alert', "2 ERROR: $err");
last;
}
if ( $Todo )
{ chomp($Todo); ## Debian patch
print "$Todo ", sprintf("%0.8f",gettimeofday - $stime),"\n";
print $client "Client $Todo: Thank you!\n";
close ( $client );
};
}
}
}
exit;
####
use strict;
use warnings;
use Socket;
use Time::HiRes qw( gettimeofday usleep );
our @Total = (); our $Totcnt = 500;
our $remote_host = "172.16.47.22";
our $remote_port = 3000;
for ( 0..$Totcnt )
{ my $parms = $$;
my $result = Call_Multi_User( $parms );
if ( ! $result ) { print "\t****Nothing Back\n"; }
print "$result\n";
usleep 20000;
}
my $open = $Total[0]; my $total = $Total[1];
my $diff = ( $total / $open ) - 1 ;
$open = $Total[0] / $Totcnt; my $total = $Total[1] / $Totcnt;
print "\n\tTotals:\t\t\t".sprintf("%0.8f",$open) . "\t".sprintf("%0.8f",$total)."\t+ ".sprintf("%0.3f",$diff)." %\n\n";
exit;
sub Call_Multi_User
{ my $Todo = shift; if ( ! defined $Todo ) { return( "" ); }
our $server;
my $stime = gettimeofday; my $answer = "";
# if ( ! $server ) ## if this worked then we wouldn't have the establish overhead!
{
socket( $server, PF_INET, SOCK_STREAM, getprotobyname('tcp')); # create a socket
# build the address of the remote machine
my $internet_addr = inet_aton($remote_host)
or die "Couldn't convert $remote_host into an Internet address: $!\n";
my $paddr = sockaddr_in($remote_port, $internet_addr);
# connect
connect($server, $paddr)
or die "Couldn't connect to $remote_host:$remote_port: $!\n";
select((select($server), $| = 1)[0]); # enable command buffering
}
my $open = gettimeofday - $stime;
print $server "$Todo\n";
shutdown($server,1); # my $no = 0;
while (<$server>)
{ $answer .= $_;
}
close $server;
chomp($answer);
my $total = gettimeofday - $stime;
my $diff = ( $total / $open ) - 1 ;
$Total[0] += $open; $Total[1] += $total;
$answer .= "\t".sprintf("%0.8f",$open) . "\t".sprintf("%0.8f",$total)."\t+ ".sprintf("%0.3f",$diff)." %";
return ( $answer );
}
##
##
Client output:
Client 24006: Thank you! 0.00029397 0.00068903 + 1.344 %
Client 24006: Thank you! 0.00030303 0.00076103 + 1.511 %
Client 24006: Thank you! 0.00030303 0.00061202 + 1.020 %
Client 24006: Thank you! 0.00033212 0.00082612 + 1.487 %
Client 24006: Thank you! 0.00037408 0.00084996 + 1.272 %
Client 24006: Thank you! 0.00030398 0.00110912 + 2.649 %
Totals (Average): 0.00021664 0.00051245 + 1.365 %
Server output: ( 2 clients running )
24006 0.00013709
24007 0.00002718
24007 0.00003099
24006 0.00002503
24007 0.00013399
24006 0.00002623
24006 0.00003099
24007 0.00002503
24006 0.00013494
24007 0.00002503
24007 0.00003099
24006 0.00002503
24007 0.00013399
24006 0.00002599