[Moscow.pm] Coro + AnyEvent --- Что не так

Ivan Petrov i.petro.77.00 на gmail.com
Пт Окт 16 04:48:08 PDT 2015


> Остался вопрос можно ли совместить обычные повторяющие колбэки с Coro, чтобы
> например
> сервер написаный на голом AnyEvent использоватьс Coro без его переписывания к
> примеру tcp_server.


напишите аналог Coro::rouse_cb но для повторяющегося калбека.

package MyRouse;
use base 'Exporter';
our @EXPORT_OK = rouse_async;
use Coro;

sub rouse_async(&) {
    my ($cb) = @_;
    my @list;
    my $watcher;
    
    async {
    	while(1) {
            $watcher = $Coro::current;
            Coro::schedule;
            $watcher = undef;

            while (my $task = shift @list) {
            	async { \&cb; } @$task;
            }
        }
    };

    sub {
    	push @list => \@_;
    	$watcher->ready if $watcher;
    	$watcher = undef;
    }
}


a дальше будет нечто вроде

use MyRouse;
tcp_server $host, $port, MyRouse::rouse_async {
    my ($fh) = @_;
    create_coro_socket $fh;
    # работа с coro_socket
};

вот как-то так

с сокетами надо работать средствами coro или прямым доступом на основе
coro-проверок.


Подробная информация о списке рассылки Moscow-pm