[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