[Moscow.pm] AnyEvent и die
Mons Anderson
inthrax на gmail.com
Пт Дек 10 04:06:21 PST 2010
On Wednesday 08 December 2010 23:23:56 Ruslan Zakirov wrote:
> Вот и получается, что в каждом обработчике, который вызывается из
> loop'а придется вставить eval и еще по хорошему локализовать $@ перед
> этим. Как-то после этого некрасиво код выглядит.
>
> Интересно можно ли сделать следующий синтакс с помощью Devel::Declare:
>
> do {
> ...
> } on_error $error_cb;
>
> Или что похожее. Потом как-нибудь попробую.
Тут на мой взгляд фигня вот в чем:
допустим у тебя http-server.
допустим на каждый входящий запрос ты должен послать ответ.
ты выполняешь асинхронный запрос и передаешь ему sub { $req->response(200) }
для того, чтобы все было хорошо этот cb обязательно должен выполниться.
если ты поставишь отдельный обработчик на on_error, то ты в таком случае
должен запоминать cb, который должен быть вызван.
в случае, если ты всегда вызываешь cb, независимо от того, что происходило
внутри, то у тебя нет необходимости отслеживать отдельно ошибки.
PS: посмотри как я решил вопрос с подвисающими реквестами в
AnyEvent::HTTP::Server (github/Mons) - там я на Req::DESTROY проверяю - был
ли выполнен респонс. в случае каких-то ошибок программирования реквест при
уничтожении отправляет 404.
--
Vladimir Perepelitsa aka Mons Anderson
<inthrax на gmail.com> / #99779956
Подробная информация о списке рассылки Moscow-pm