我正在使用$r->pool->cleanup_register(\&cleanup);
在页面处理并打印到客户端后运行子例程。我的希望是客户端会看到完整的页面,Apache可以继续在后台进行一些处理,需要几秒钟。
但客户端浏览器会挂起,直到cleanup sub返回。在我的所有代码都返回之前,有没有办法让apache最终确定与客户端的连接?
我确信我以前做过这件事,但我再也找不到了。
答案 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;
}