ken@titan ~/tmp/pm_11151665_io_socket
$ ls -l
total 4
-rwxr-xr-x 1 ken None 387 Apr 15 13:51 client.pl
-rwxr-xr-x 1 ken None 50 Apr 15 11:57 process.sh
-rwxr-xr-x 1 ken None 464 Apr 15 13:58 server.pl
-rw-r--r-- 1 ken None 200 Apr 15 14:01 test.log
####
#!/usr/bin/env perl
use strict;
use warnings;
use IO::Socket;
my $client = IO::Socket::INET::->new(
Proto => 'tcp',
PeerAddr => 'localhost',
PeerPort => 55555,
) || die "Can't open client socket: $IO::Socket::errstr";
for my $send_num (1 .. 5) {
$client->print(<<"EOT");
GET /DATA_String/{send_num = $send_num}HTTP/1.1
host
connection
user-agent
EOT
sleep 5;
}
####
#!/usr/bin/env perl
use strict;
use warnings;
use IO::Socket;
my $server = IO::Socket::INET::->new(
Proto => 'tcp',
LocalPort => 55555,
Listen => SOMAXCONN,
ReuseAddr => 1,
) || die "Can't open server socket: $IO::Socket::errstr";
my $client = $server->accept();
$client->autoflush;
while (defined(my $read = <$client>)) {
chomp $read;
if (index($read, 'GET /DATA_String/') == 0) {
system('sh', 'process.sh', $read);
}
}
####
#!/usr/bin/env sh
echo -e "$*" >> test.log 2>&1
####
$ cat test.log
GET /DATA_String/{send_num = 1}HTTP/1.1
GET /DATA_String/{send_num = 2}HTTP/1.1
GET /DATA_String/{send_num = 3}HTTP/1.1
GET /DATA_String/{send_num = 4}HTTP/1.1
GET /DATA_String/{send_num = 5}HTTP/1.1