perl - 是否有与 PHP 的 ignore_user_abort() 等效的 mod_perl2/Perl 5?

标签 perl http mod-perl mod-perl2

我正在编写一个内部服务,需要为一个长时间运行的进程访问 mod_perl2 实例。该作业是从 HTTP POST 触发的,mod_perl 处理程序将其拾取并完成工作。它可能需要很长时间,并准备好异步处理,所以我希望我可以在它运行时终止 HTTP 连接。

PHP 有一个函数 ignore_user_abort(),当与正确的 header 结合使用时,可以提前关闭 HTTP 连接,同时让进程保持运行(此技术在 SO 上多次提到) .

Perl 有等价物吗?我还没找到。

最佳答案

好的,我明白了。

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();

关于perl - 是否有与 PHP 的 ignore_user_abort() 等效的 mod_perl2/Perl 5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1088067/

相关文章:

perl - 如何手动创建 Apache 请求对象?

perl LWP::UserAgent 给出了一个神秘的错误消息

angular - 如何从管道加载 JSON?

node.js - 为什么在编辑状态码时没有正确表达重定向

perl - 我可以让单个 Perl 模块充当多种 mod_perl 处理程序吗?

perl - 无法在 PERL 中将字符串转换为十六进制

regex - 这是否违反了 'leftmost longest' 原则?

Perl 字符串比较

perl - 无法为模块 XML::LibXML 加载 'C:/strawberry/perl/site/lib/auto/XML/LibXML/LibXML.dll'

python - Python 3 Web Scraping 中的问题 HTTP 错误 403