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();
In reply to Re^2: AnyEvent::HTTPD -> Extra Callback after response?
by sectokia
in thread AnyEvent::HTTPD -> Extra Callback after response?
by sectokia
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |