Hi,
I am trying to persuade Mojolicious to initiate four HTTP requests and then
inspect the results of each when they finish.
Ideally the program will
1. Set up four concurrent HTTP requests
2. Wait for all four to finish
3. Process the results.
I've read the documentation for Mojo::IOLoop, Mojo::IOLoop::Delay and
Mojo::UserAgent. All of them contain examples which indicate how this
might be done, but in all the variations I have tried my code fails when it
tries to extract the HTTP result bodypart.
The error message is variations on "Premature connection close".
Here is the relevant portion of my code as it stands now. It's based on
the Mojo::UserAgent example titled "Concurrent non-blocking requests
(synchronized with a delay)".
The dblist hash has is simply a way of tracking a set of unique URLs
(currently four).
my @results;
Mojo::IOLoop->new->delay(
# Set up the requests
sub {
my $delay = shift;
foreach my $db (keys %dblist) {
print "\nSending request $url$db&q=$query\n";
my $HTTP = Mojo::UserAgent->new;
$HTTP->get("$url$db&q=$query" => $delay->begin);
}
},
# Save the results
sub {
my $delay = shift;
print "Saving ".scalar(@_)." results...\n";
foreach my $tx (@_) {
print "Got a result?\n";
push @results, $tx->result->body;
}
}
)->wait;
print "\nReceived ", scalar(@results), " results\n";
print " -> $_\n" foreach @results;
When I run the program (using the Mojo Test harness) I get:
Sending request http://localhost:8086/query?epoch=s&db=solarmon_day&q=...
Sending request http://localhost:8086/query?epoch=s&db=solarmon_30min&q=...
Sending request http://localhost:8086/query?epoch=s&db=solarmon_5min&q=...
Sending request http://localhost:8086/query?epoch=s&db=solarmon&q=...
Saving 4 results...
Got a result?
Mojo::Reactor::Poll: Timer failed: Premature connection close at myprogram.pm
line 1042.
Received 0 results
(I have removed the details of the full URL request path for brevity.)
Line 1042 is the *push* statement.
I think the HTTP request itself is correct; if a issue a single,
non-blocking request using any of the four URLs I get a valid response.
I've been banging my head against this for a couple of days now and I don't
seem to be be getting closer to a result.
Help!
Thanks,
Jeremy Begg
--
You received this message because you are subscribed to the Google Groups
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.