如何在Perl MVC Catalyst Framework中的请求结束之前编写或更新会话数据。
我正在使用Session::State::Cookie
和Session::Store::FastMap
我需要确保数据在 长期运行的请求完成之前可用
答案 0 :(得分:1)
这对我有用。
为了确保在长时间运行的请求中设置信息时更新信息,我在更新了与会话相关的一些重要信息后立即执行$c->finalize_session
:
$c->session->{important_info} = "new value";
$c->finalize_session;
我确认其他请求之后正在收集正确的值。
我没有观察到在请求期间多次调用$c->finalize_session
的任何副作用,只是为了确保更新会话数据,但我不知道这一点。
我以这种方式设置的信息之一是更新进度条以反馈用户的计数器(因为此任务需要很长时间)。我不知道这是否是最佳方式,我将不胜感激任何建议。
答案 1 :(得分:0)
您可以在请求完成之前执行最后一秒处理,并通过覆盖应用程序主模块或插件中的handle_request方法将响应发送到客户端。
sub handle_request {
my ($c, @args) = @_;
my $status = $c->next::method(@args);
# Do some last minute processing before the request is completed.
return $status;
}
我在重写此方法之前收集有关请求的统计信息,或者如果它使用了太多内存,则重新启动工作进程。如果这有用,或者您对此有更多疑问,请与我们联系。