[SP-pm] POE
Adriano Rodrigues
a.r.ferreira em gmail.com
Sexta Novembro 10 04:52:10 PST 2006
On 11/9/06, Lorn <lorn.br at gmail.com> wrote:
> Pelo visto ninguem gosta do POE :)
> Eu ouvi falar tão bem dele por ai, mais ele é muito complicado de entender.
POE é reconhecido como "A" solução quando você precisa de multitask
sem usar threads ou processos. A questão é que a a multi-tarefa do POE
é cooperativa - se alguém resolve não largar do osso, vai pôr a perder
todas as outras tarefas que ficarão esperando indefinidamente. É
complicado porque programação com eventos assíncronos é dureza.
Compare:
# isto é só código ilustrativo
my $ftp = Net::FTP::Client->new($server, $user, $pass, $path);
$ftp->get($the_file_I_want); # bloqueia enquanto faz o download
$ftp->close;
Em (pseudo) POE, seria algo como:
# também é só ilustrativo
my $ftp = POE::FTP::Cliente->new($server, $user, $pass, $path);
open my $local_file, ">", "~/local-file" or die "I don't like you: $!\n";
my $callback = sub { # isto é um closure
my $self = shift;
my $data = shift;
print($local_file, $data), return if $data;
close $local_file; # o download acabou
$ftp->close;
};
$ftp->get($the_file_I_want, \&callback);
# pode ir fazer outras coisas, que o callback será chamado
# quando houver dados e o controle retornará para o que
# mais está sendo feito em paralelo quando o callback
# invocar a espera por mais eventos.
DISCLAIMER: Qualquer semelhança do código acima com módulos reais é
pura coincidência e também vale o mesmo para qualquer semelhança com
um código POE que funciona.
Dito isto, eu esgotei tudo o que sabia sobre POE, mas recomendo que
você insista porque POE é um 'framework' bem respeitado e a base de
muitos módulos no CPAN.
> > On 11/9/06, Lorn <lorn.br at gmail.com> wrote:
> > > Rau, Monks!
> > >
> > > Alguem aí já programou usando POE?
> > > Eu preciso fazer um Daemon ( server ) que controler varios clients, e
> pelo
> > > que vi é melhor fazer com POE, alguem pode me dar uma luz? etc :D
> > > ou alguma ideia melhor que POE, eu quero fazer um server multitasking.
Mais detalhes sobre a lista de discussão SaoPaulo-pm