in reply to Re: AnyEvent::HTTPD -> Extra Callback after response?
in thread AnyEvent::HTTPD -> Extra Callback after response?
The first sub is only called on on each client connect. The second sub is gets called twice for reason.
I can get around it as per below, by storing a flag to indicate I've already handled this 'request':
use strict; use warnings; use AnyEvent::HTTPD; my $h = AnyEvent::HTTPD->new(port => 8123);; my $requests = {}; my $requestCounter = 0; $h->reg_cb ( '/test' => sub { my ($httpd,$req) = @_; my $request = $requestCounter; $requestCounter++; print "Starting request $request\n"; $requests->{$request}->{'state'} = 'new'; $req->respond({ content => ['text/plain', sub { my ($data_cb) = @_; return unless $data_cb; if (($requests->{$request}->{'state'} // 0) ne 'new') { $data_cb->(); return; } $requests->{$request}->{'state'} = 'handled'; print "Setting timer for $request...\n"; $requests->{$request}->{'timer'} = AnyEvent->timer(aft +er => 3, cb => sub { print "Sending response for $request...\n"; $data_cb->("You are request $request"); $data_cb->(); delete $requests->{$request}; return; }); }] }); }, ); my $c = AnyEvent::condvar; $c->recv();
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: AnyEvent::HTTPD -> Extra Callback after response?
by cavac (Prior) on Jun 11, 2021 at 11:21 UTC | |
by sectokia (Friar) on Jun 17, 2021 at 08:47 UTC |