3 small pieces of perl code for the syntax
- listener.pl - server socket script to listen and consume a stream of ASCII lines from a socket
- producer.pl - client socket script to produce/write a stream of XML (ASCII lines) supplied in a file onto a socket
- consumer.pl - client socket script to consume a stream of XML ASCII lines from a socket
listener.pl - simple server
#!/usr/bin/perl
use IO::Socket;
use POSIX qw/strftime/;
$|=1;
my $sock = new IO::Socket::INET (
LocalHost => 'localhost', # rem to change to server ip addr if not running on same machine as the client
LocalPort => '5555',
Proto => 'tcp',
Listen => 1,
Reuse => 1,
);
die "Could not create socket: $!\n" unless $sock;
$count = 0;
$num_recs = 0;
$num_files = 1;
$max_recs = 30000;
$path = "/data/";
$file_root = "test";
$datetime = strftime('%Y%m%d%H%M%S',localtime);
open OUT, "|gzip -c > ${path}${file_root}_${datetime}_${num_files}.gz" or die "unable to create OUT";
my $new_sock = $sock->accept();
while(<$new_sock>) {
$line = $_;
#print "line: $count: $num_recs : $line";
$count++;
if (m#
{
print OUT $line;
$num_recs++;
if (($num_recs % $max_recs) == 0)
{
#print "in reset : $count : $num_recs \n";
close(OUT);
$num_files++;
$datetime = strftime('%Y%m%d%H%M%S',localtime);
open OUT, "|gzip -c > ${path}${file_root}_${datetime}_${num_files}.gz" or die "unable to create OUT";
}
}
else
{
#print "$count : $num_recs : in else\n";
print OUT $line;
}
}
close (OUT);
close($sock);
producer.pl - simple producer client
#!/usr/bin/perl
use IO::Socket;
my $sock = new IO::Socket::INET (
PeerAddr => 'localhost', # rem to chg to server ip addr if not running socket client and server on same server
PeerPort => '5577',
Proto => 'tcp',
);
die "Could not create socket: $!\n" unless $sock;
open IN, "xml.dump" or die "unable to open IN";
$i = 0;
print "before while\n";
while (
{
$i++;
#print "in loop: $i \n";
print $sock "$_";
}
close(IN);
close($sock);
consumer.pl - client consumer/reader of socket
#!/usr/bin/perl
use IO::Socket;
use POSIX qw/strftime/;
use File::Path;
my $sock = new IO::Socket::INET (
PeerAddr => 'localhost', # rem to replace with svr ip if not on same machine as socket server
PeerPort => '1099',
Proto => 'tcp',
);
die "Could not create socket: $!\n" unless $sock;
$|=1;
$count = 0;
$num_recs = 0;
$num_files = 1;
$max_recs = 60000;
$path = "/data";
$file_root = "test";
$datetime = strftime('%Y%m%d%H%M%S',localtime);
$yyyymmdd = strftime('%Y%m%d',localtime);
unless (-d "${path}${yyyymmdd}")
{
mkpath("${path}/${yyyymmdd}") or die "Unable to mkpath(${path}${yyyymmdd}) ($!)\n";
}
open OUT, "|gzip -c > ${path}${yyyymmdd}/${file_root}_${datetime}_${num_files}.gz" or die "unable to create OUT";
# client read from socket
while(<$sock>) {
$line = $_;
#print "line: $count: $num_recs : $line";
$count++;
if (m#
{
print OUT $line;
$num_recs++;
if (($num_recs % $max_recs) == 0)
{
#print "in reset : $count : $num_recs \n";
close(OUT);
$num_files++;
$datetime = strftime('%Y%m%d%H%M%S',localtime);
$yyyymmdd = strftime('%Y%m%d',localtime);
unless (-d "${path}${yyyymmdd}")
{
mkpath("${path}${yyyymmdd}") or die "Unable to mkpath(${path}${yyyymmdd}) ($!)\n";
}
open OUT, "|gzip -c > ${path}${yyyymmdd}/${file_root}_${datetime}_${num_files}.gz" or die "unable to create OUT";
}
}
else
{
#print "$count : $num_recs : in else\n";
print OUT $line;
}
}
close (OUT);
close($sock);
No comments:
Post a Comment