首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Perl中处理客户/服务器通信?

如何在Perl中处理客户/服务器通信?
EN

Stack Overflow用户
提问于 2011-11-30 22:52:39
回答 1查看 857关注 0票数 2

我有两个Perl脚本,它们应该完成以下工作:

服务器启动并等待客户端连接。客户端连接并静态地发送XML文件。服务器读取XML文件并启动几个线程。每个线程接收$client套接字作为参数,一旦完成,它们必须将输出发送回客户端。同时,客户端正在等待消息的到达,他应该在命令行上打印这些消息。

现在我的问题是我不知道如何实现最后一部分。我尝试使用接收方法,但如果我这样做,两个程序都会卡住。

服务器端:

代码语言:javascript
复制
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);
}

客户端:

代码语言:javascript
复制
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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-01 00:27:02

您不能将发送部分放入子线程/工作线程中,它会变得混乱。

问:为什么多线程的小鸡要过马路?

答:另一边。直截了当

相反,让父/老板线程收集孩子的结果,如果需要的话,对数据进行排序,序列化,然后作为一个整体发送。

您可以使用在IO::Socket中也可以作为方法使用的recv function进行阅读。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8327818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档