AnyEvent, AnyEvent::HTTP и Mojo::ByteStream
Удивление, удивление-два и привычка :)
Был удивлен, но оказывается AnyEvent/EV не позволяет выполнять вложенные condvar, получается рекурсия.
Вложенные кондвары не нужны, код легко модифицировать на работу либо с одним (самое главное send вызвать в самый последний момент, чтобы вся асинхронная работа была выполнена), либо с несколькими, тогда вызовы должны быть последовательными. Пример.
Так же был удивлён, что AnyEvent::HTTP автоматически заполняет заголовок Referer у запроса (для работы по умолчанию это лишнее) и не искейпит символы в урле (очень плохо, LWP::UserAgent и/или PoCo::Client::HTTP это делают на автомате, т.к. используют HTTP::Request).
За последнее время я так привык работать с Mojo (напомню, Mojo – pure perl http-фреймворк, "почти" без зависимостей, "веб в коробке"), что при возникновение задач вне окружения Mojo, которые связаны с перекодированием символом, не задумываясь, использую модуль Mojo::ByteStream. Например, для искейпинга символов в урле (проблема с AnyEvent::HTTP) использую следующий код:
Для перевода html-последовательности символов вида Г в печатные символы использую следующий код:
Очень удобно и не надо вспоминать, в каком модуле реализован данный функционал.
use Perl or die;
JFDI
Был удивлен, но оказывается AnyEvent/EV не позволяет выполнять вложенные condvar, получается рекурсия.
Вложенные кондвары не нужны, код легко модифицировать на работу либо с одним (самое главное send вызвать в самый последний момент, чтобы вся асинхронная работа была выполнена), либо с несколькими, тогда вызовы должны быть последовательными. Пример.
Так же был удивлён, что AnyEvent::HTTP автоматически заполняет заголовок Referer у запроса (для работы по умолчанию это лишнее) и не искейпит символы в урле (очень плохо, LWP::UserAgent и/или PoCo::Client::HTTP это делают на автомате, т.к. используют HTTP::Request).
За последнее время я так привык работать с Mojo (напомню, Mojo – pure perl http-фреймворк, "почти" без зависимостей, "веб в коробке"), что при возникновение задач вне окружения Mojo, которые связаны с перекодированием символом, не задумываясь, использую модуль Mojo::ByteStream. Например, для искейпинга символов в урле (проблема с AnyEvent::HTTP) использую следующий код:
Mojo::ByteStream->new($str)->url_escape
Для перевода html-последовательности символов вида Г в печатные символы использую следующий код:
Mojo::ByteStream->new($str)->encode('utf8')->html_unescape
Очень удобно и не надо вспоминать, в каком модуле реализован данный функционал.
use Perl or die;
JFDI
