[Rio-pm] AnyEvent

Aureliano Guedes guedes_1000 em hotmail.com
Quarta Março 14 15:09:57 PDT 2012


Moço, você revela meu codinome assim na frente da comunidade toda... hahaha

Não entendi, o sleep não faz nada, ja tirei, não entendi essa história de incrementar a variavel no while.
Após conectar no socket eu enviaria o que??

Mudei um pouco, o que ainda falta??

#!/usr/bin/perl -w

use common::sense;
use IO::Socket::INET;
use AnyEvent::Util;
use List::Util qw(shuffle);

sub usage {
   printf "Usage: %s <hostaddr> <port> <packs> <request>\n", $0;
   printf "   <hostaddr> - Adress to check.\n";
   printf "   <port>     - Port to check 1-1024(default is 80).\n";
   printf "   <request>  - Number of requests(default is 10).\n";
   exit;
}

my $host = $ARGV[0] || usage;
my $port = $ARGV[1] || 80;
my $request = $ARGV[2] || 10;

my $cv = AE::cv;

    $AnyEvent::Util::MAX_FORKS = 10;

for (1 .. $request){

    $cv->begin;
        fork_call {
            
        } sub {
            &connect($port, $host);
            $cv->end;
        };


}

$cv->wait;

sub connect{
    my $pr = shift;
    my $ht = shift;
    my $ping = IO::Socket::INET->new(
        PeerPort => $pr ,
        PeerAddr => $ht,
        Proto => 'udp',
        LocalAddr => 'localhost',
        Broadcast => 1,
        Type => SOCK_DGRAM
    )
    or die "Can't bind : $@\n";
}

From: juniiior182 em gmail.com
Date: Wed, 14 Mar 2012 18:10:22 -0300
To: rio-pm em pm.org
Subject: Re: [Rio-pm] AnyEvent

Hi.

Xuxu's, primeiro vamos por partes.

Pra começar, você não tá incrementando a variável no while(). Daria um loop infinito.
Segundo... Qual a função do sleep ali?
Terceiro... Se ainda sim executasse a ação solicitada, só conectaria no socket e então não faria mais nada. LOL



[]'s

Em 14 de março de 2012 18:02, Aureliano Guedes <guedes_1000 em hotmail.com> escreveu:






Valeu mesmo a ajuda, o bom de ser um "Perlzeiro" é que alem da linguagem maravilhosa tem uma comunidade muito
atenta para ajudar.

Poderia dar uma analizada no meu codigo.


#!/usr/bin/perl -w




use common::sense;
use IO::Socket::INET;
use AnyEvent::Util;
use List::Util qw(shuffle);


sub usage {
   printf "Usage: %s <hostaddr> <port> <packs> <request>\n", $0;


   printf "   <hostaddr> - Adress to check.\n";
   printf "   <port>     - Port to check 1-1024(default is 80).\n";
   printf "   <packs>    - Number of packages(default is 65000).\n";


   printf "   <request>  - Number of requests(default is 10).\n";
   exit;
}

my $host = $ARGV[0] || usage;
my $port = $ARGV[1] || 80;
my $request = $ARGV[2] || 10;
my $a = 1;


my $cv = AE::cv;

    $AnyEvent::Util::MAX_FORKS = 10;

while ($a <= $request){

    $cv->begin;
        fork_call {
            sleep $a;
        } sub {
            &connect($port, $host);


            $cv->end;
        };


}

sub connect{
    my $pr = shift;
    my $ht = shift;
    my $ping = IO::Socket::INET->new(
        PeerPort => $pr ,
        PeerAddr => $ht,


        Proto => 'udp',
        LocalAddr => 'localhost',
        Broadcast => 1 )
    or die "Can't bind : $@\n";
}

From: creaktive em gmail.com


Date: Wed, 14 Mar 2012 17:48:24 -0300
To: rio-pm em pm.org
Subject: Re: [Rio-pm] AnyEvent

Você está fazendo isso certo :)Um exemplo ilustrativo tosco de como usar AnyEvent para o que vc quer (observe a lógica; o protocolo aqui é HTTP em cima de TCP):







        my $cv = AE::cv;







        my $i = 0;












        my $get;







        $get = sub {







            $cv->begin;







            http_get $urls[$i++], sub {







                $get->() if $i <= $#urls;







                $cv->end;







            };







        };












        for (1 .. $parallel) {







            $get->();







        }







        $cv->wait;




Mais detalhes sobre AnyEvent:
http://sao-paulo.pm.org/equinocio/2011/set/13


ABS()





On Wed, Mar 14, 2012 at 17:29, Aureliano Guedes <guedes_1000 em hotmail.com> wrote:








Boa tarde monges, 
estou tentando entender o modulo AnyEvent, mas programação orientada a eventos é  russo pra minha cabeça ainda.

Eu tenho uma rotina que se conecta a um IP qualquer usando protocolo UDP com IO::Socket::INET, e quero que essa rotina tente fazer 10 requisições por vez.




Eu ja eliminei a ideia de usar threads, mas to com dificuldade de usar esse modulo.

To totalmente perdido, pensei em usar AnyEvent::Util e List::Util, mas to começando a achar que não é apropriado, mas foi la que achei um exemplo mais ou menos...





Se puderem colaborar com um exemplo bem simples para eu entender, eu agradeço...

Att,
Aureliano Guedes
 		 	   		  

_______________________________________________

Rio-pm mailing list

Rio-pm em pm.org

http://mail.pm.org/mailman/listinfo/rio-pm



_______________________________________________
Rio-pm mailing list
Rio-pm em pm.org
http://mail.pm.org/mailman/listinfo/rio-pm 		 	   		  

_______________________________________________

Rio-pm mailing list

Rio-pm em pm.org

http://mail.pm.org/mailman/listinfo/rio-pm


-- 
Junior Moraes (fvox)


Perl Developer
http://www.unsecurity.com.br/

     





_______________________________________________
Rio-pm mailing list
Rio-pm em pm.org
http://mail.pm.org/mailman/listinfo/rio-pm 		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20120314/fcc1ec8d/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm