[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