我正在尝试创建一个可以一次连接到100个URL的程序,并取决于每个连接的输出(即,在HTTP Connect上的成功),然后是Perl脚本将转到功能X,或者不进行。我能想到的最好的是这个脚本。但是我希望它可以同时连接到100个URL,或并行,每个URL返回一个响应(因此我应该在LWP超时的结尾处获得100个左右的响应),以弄清楚下一步要做什么。但是,我见过的大多数示例都倾向于做一个URL。它可能会贯穿20-30个,但是如果一个人倒下,那就是减速的开始。
use Mojo::Client;
use Mojo::Transaction;
my $client = Mojo::Client->new;
my $tx = Mojo::Transaction->new_get('http://labs.kraih.com');
my $tx2 = Mojo::Transaction->new_get('http://mojolicious.org');
$tx2->req->headers->expect('100-continue');
$tx2->req->body('foo bar baz');
$client->process_all($tx, $tx2);
print $tx->res->code;
print $tx2->res->code;
print $tx2->res->content->file->slurp;
但是,它为每个事务创建变量。如果我要去100个网站,创建$ TX1- $ TX 100会很痛苦。
预先感谢。
这是我的基本建议:为每个URL创建一个过程,并让该过程独立于另一个URL处理。请注意,如果您需要登录,所有进程都可以在文件上共享一个句柄。
#!/usr/bin/perl
use strict;use warnings;
my @url = ('url1','url2','url3');
my $pid;
my $url_to_process;
foreach my $url (@url) {
$pid = fork; #create new process.
unless ($pid) {
$url_to_process = $url;
last;
} #end loop if we are a child
}
unless ($pid) {
print "$$: $url_to_processn"; # or do anything you like with the url
}