gpt4 book ai didi

multithreading - 如何在Perl中处理客户端服务器通信?

转载 作者:行者123 更新时间:2023-12-03 13:00:54 25 4
gpt4 key购买 nike

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

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

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

服务器端:

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();

最佳答案

您不能将发送部件放入子线程/工作线程中,否则会很困惑。

Q: Why did the multi-threaded chicken cross the road?

A: other to side. To the get


而是让父/老板线程收集子进程的结果,对数据进行排序(如有必要),进行序列化,然后整体发送。
您可以使用 recv function进行阅读,它也可以作为 IO::Socket 中的一种方法使用。

关于multithreading - 如何在Perl中处理客户端服务器通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8327818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com