Как записать / обновить данные сеанса до завершения запроса в Perl Catalyst MVC Framework - PullRequest
1 голос
/ 29 февраля 2012

Как я могу записать или обновить данные сеанса, прежде чем запрос закончится в Perl MVC Catalyst Framework. Я использую Session::State::Cookie и Session::Store::FastMap

Мне нужно убедиться, что данные доступны до Выполнение долгосрочного запроса

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Вот что у меня сработало.

Чтобы гарантировать, что информация обновляется во время ее установки в долгосрочном запросе, я делаю $c->finalize_session сразу после обновления некоторой важной информации, связанной с сеансом:

$c->session->{important_info} = "new value";
$c->finalize_session;


Я убедился, что другие запросы набирают правильное значение после этого.

Я не наблюдал никаких побочных эффектов, вызывающих $c->finalize_session много раз во время запроса только для того, чтобы обеспечить обновление данных сеанса, но я не уверен в этом.

Одной из данных, которые я задаю таким образом, является счетчик для обновления индикатора выполнения для обратной связи с пользователем (поскольку эта задача занимает много времени).Я не знаю, является ли это лучшим способом сделать это, я буду признателен за любое предложение.

0 голосов
/ 01 марта 2012

Вы можете выполнить некоторую обработку в последнюю секунду непосредственно перед завершением запроса и отправкой ответа клиенту, переопределив метод 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;
}

У меня естьпереопределите этот метод, прежде чем собирать статистику о запросе или перезапустить рабочий процесс, если он использует слишком много памяти.Дайте мне знать, если это полезно или у вас есть еще вопросы по этому поводу.

...