当我在mod_perl中注册清理处理程序时,为什么浏览器会挂起?

时间:2010-01-05 10:50:46

标签: perl apache http mod-perl

我正在使用$r->pool->cleanup_register(\&cleanup);在页面处理并打印到客户端后运行子例程。我的希望是客户端会看到完整的页面,Apache可以继续在后台进行一些处理,需要几秒钟。

但客户端浏览器会挂起,直到cleanup sub返回。在我的所有代码都返回之前,有没有办法让apache最终确定与客户端的连接?

我确信我以前做过这件事,但我再也找不到了。

2 个答案:

答案 0 :(得分:1)

使用作业队列系统并完全异步执行长操作 - 只需在Web请求期间安排操作。作业队列还可以处理峰值负载情况,而不是在Web服务器进程中执行昂贵的操作。

答案 1 :(得分:0)

您想要flush the buffer.它没有最终确定连接,但您的客户端会在任务完成之前看到输出。

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

      $r->print(long_operation());
      return Apache2::Const::OK;
  }