我有两个Perl脚本,它们应该完成以下工作:
服务器启动并等待客户端连接。客户端连接并静态地发送XML文件。服务器读取XML文件并启动几个线程。每个线程接收$client套接字作为参数,一旦完成,它们必须将输出发送回客户端。同时,客户端正在等待消息的到达,他应该在命令行上打印这些消息。
现在我的问题是我不知道如何实现最后一部分。我尝试使用接收方法,但如果我这样做,两个程序都会卡住。
服务器端:
my @threads;
$server = IO::Socket::INET->new(
Listen => 1,
LocalAddr => 'localhost',
LocalPort => '8080',
Proto => 'tcp'
) or die "Can't crete socket!\n";
$client = $server->accept;
open FILE, ">".$filename or die "Can't open file!\n";
while (<$client>) {
print FILE $_;
}
close FILE;
# READ FILE AND DO SOME OTHER STUFFS
push @threads, threads ->create(\&subroutine1, $parameters, $client);
# OTHER STUFFS
push @threads, threads ->create(\&subroutine2, $parameters, $client);
# MORE THREADS...
sub subroutine1 {
my @pars= @_;
my $parameters = $pars[0];
my $client = $pars[1];
my $sub1 = `perl other_script.pl $parameters`;
$client->send($mem);
}客户端:
my $server = IO::Socket::INET->new(
PeerAddr => 'localhost',
PeerPort => '8080',
Proto => 'tcp'
) or die "Can't create client socket!\n";
open FILE, $filename;
while (<FILE>) {
print $server $_;
}
close FILE;
# HOW DO I READ INFORMATIONS?
$server->close();发布于 2011-12-01 00:27:02
您不能将发送部分放入子线程/工作线程中,它会变得混乱。
问:为什么多线程的小鸡要过马路?
答:另一边。直截了当
相反,让父/老板线程收集孩子的结果,如果需要的话,对数据进行排序,序列化,然后作为一个整体发送。
您可以使用在IO::Socket中也可以作为方法使用的recv function进行阅读。
https://stackoverflow.com/questions/8327818
复制相似问题