我正在编写一个内部服务,需要触摸mod_perl2实例以进行长时间运行的进程。该作业是从HTTP POST中触发的,而mod_perl处理程序会将其拾取并完成工作。这可能需要很长时间,并且可以异步处理,所以我希望我可以在它运行时终止HTTP连接。
PHP有一个函数ignore_user_abort()
,当它与正确的标题结合使用时,可以提前关闭HTTP连接,同时让进程保持运行(这种技术在SO上提到了几次)。
Perl有同等效力吗?我还没有找到一个。
答案 0 :(得分:3)
好的,我明白了。
Mod_perl在这里遇到了PHP的“相反”问题。默认情况下,即使连接中止,mod_perl进程也会保持打开状态,默认情况下PHP会关闭进程。
Practical mod_perl book说明如何处理中止的连接。
(顺便说一句,出于这个特定问题的目的,列表中的作业队列比'断开'http进程)更低
#setup headers
$r->content_type('text/html');
$s = some_sub_returns_string();
$r->connection->keepalive(Apache2::Const::CONN_CLOSE);
$r->headers_out()->{'Content-Length'} = length($s);
$r->print($s);
$r->rflush();
#
# !!! at this point, the connection will close to the client
#
#do long running stuff
do_long_running_sub();
答案 1 :(得分:0)