Question

I'm using $r->pool->cleanup_register(\&cleanup); to run a subroutine after a page has been processed and printed to the client. My hope was that the client would see the complete page, and Apache could continue doing some processing in the background that takes a few seconds.

But the client browser hangs until cleanup sub has returned. Is there a way to get apache to finalise the connection with the client before all my code has returned?

I'm convinced I've done this before, but I can't find it again.

Was it helpful?

Solution

Use a job queue system and do the long operation completely asynchronously -- just schedule the operation during the web request. A job queue also handles peak load situations better than doing something expensive within the web server processes themselves.

OTHER TIPS

You want to flush the buffer. It doesn't finalize the connection, but your client will see the output before the task completes.

sub handler {
      my $r = shift;
      $r->content_type('text/html');
      $r->rflush; # send the headers out

      $r->print(long_operation());
      return Apache2::Const::OK;
  }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top