[Moscow.pm] Coro
Dmitry Karasik
dmitry на karasik.eu.org
Чт Янв 26 09:10:27 PST 2012
On Thu, Jan 26, 2012 at 05:37:24PM +0200, Alexandr Gomoliako wrote:
> > 1: что если sysread/syswrite не смогут записать/прочитать все сразу -
> > требуется
> > повторный вызов ::io
>
> Колбэк вызывается все время, пока $fh readable/writable.
это интересно ... значит ли это что вот в такой конструкции
$w = AE::io $fh, 0, $read;
...
$read = sub {
my $len = sysread $fh, $buf, ...;
if ($len) {
$t = AE::timer 15, 1, $write_timeout;
$w = AE::io $fh, 0, $write;
&$write();
...
} elsif (...) {
...
&$end();
}
}
когда активированы и $read и $write, а сокет будет одновременно читабельным и писабельным,
порядок вызова коллбэков не определен? или грубо, мы вызвали
$w = AE::io $fh, 0, $write;
а оно вызовет $read?
> > 2: что если http нужно заменить на https , в котором sysread/syswrite уже
> > просто
> > так не катит (т.к. для неблокирущего IO::Socket::SSL требуется шаманство)
>
> Для этого нужно делать обертку для sysread()/syswrite() или будет сложно.
Конечно нужно ;) Вы попробуйте, попробуйте, там весьма интересно ) Например,
по протоколу нужно уже читать, а SSL layer говорит, нет мол, нужно дописать
сначала. Потому что у него обернут select, который допишет шифрованные данные из буфера,
а потом уж можно и читать )))
> > 3: наконец, линейность в коде внизу, какбы, не такая уж и линейная.
> Ну тогда и линейность лямбды как-бы не такая уж и линейная тоже :)
Линейнее голых коллбэков 100%, для того и делалась. Как я уж говорил,
IO::Lambda сравнивать с AE некорректно, это разные весовые категории -
возможности первого больше чем просто коллбэки. Да, если вам надо простой
протокол, их и хватит. Если же надо много структурированных протоколов с
униформным интерфейсом, тогда коллбэки будут кошмаром в коде.
Это не считая того что IO::Lambda умеет не только IO, вобщем то - там и
поллинг, и треды (привет Леману :), и неблокирующий flock как коллбэк, и
чужеродные лупы типа SNMP которые вообще ни с кем не умеют дружить, и все это
под одним интерфейсом. И еще куча всего. Да, это надстройка и новый синтаксис.
Ну так что ж, у C тоже был новый синтаксис по сравнению с ассемблером :)
--
Sincerely,
Dmitry Karasik
Подробная информация о списке рассылки Moscow-pm