Existem outros frameworks, mais leves e mais específicos, tal como: http://search.cpan.org/~rhandom/Net-Server-0.99/ E... BEWARE UDP!!! Tive oportunidade de presenciar pacotes sendo perdidos e fora de ordem numa LAN, imagine em Internet!
ABS() 2011/5/3 Andre Carneiro <andregarciacarne...@gmail.com> > Oi Solli! > > > Exatamente! Quando eu tento o raio do getline, ele não me traz nada apesar > de escrever no socket, mas com certeza tem alguma coisa errada que eu não > estou vendo. Talvez haja algum problema com a ordem que eu estou fazendo as > coisas, sei lá. Vou dar uma fuçada no seu código e comparar as coisas pra > descobrir. > > > Sobre usar um framework, eu tô fazendo uns testes com o AnyEvent. Eu > sinceramente acho POE muuuuito grande e complicado para o meu cérebro > limitado. Já com o AnyEvent eu tô conseguindo me entender melhor. > > > Sobre o livro, já tá na minha lista desse ano para comprar. > > > Sobre usar UDP acho que não vale a pena por enquanto. Mesmo pq já tenho um > deadline bem apertado pra entregar essa meleca. Então deixa pra lá. Talvez > numa outra versão > > > Thx a lot! > > > Cheers! > > > > > > 2011/5/3 Solli Honorio <shono...@gmail.com> > >> >> >> >> Uma das maneiras é assim : >> >> <code> >> >> #!/usr/bin/env perl >> use strict; >> use IO::Socket::INET; >> >> my $quit = 0; >> >> $SIG{INT} = sub { $quit++ }; >> >> my $listen_socket = IO::Socket::INET->new(LocalPort => 2121, >> Listen => 2, >> Proto => 'tcp', >> Reuse => 1,) or die "$!"; >> >> while ( !$quit ) { >> next unless my $connection = $listen_socket->accept; >> >> defined ( my $child = fork() ) or die "Can't fork: $!"; >> >> if ( $child == 0 ) { >> $listen_socket->close; >> do_something($connection); >> exit 0; >> } >> >> $connection->close; >> >> } >> >> sub do_something { >> my $socket = shift; >> >> $socket->autoflush(1); >> $socket->print("Entre com os numeros para calculo:\n"); >> >> while ( 1 ) { >> my $input = $socket->getline(); >> exit 0 if $input =~ /quit/i; >> $socket->print($input); >> } >> >> } >> >> <code> >> >> O código acima é um echo server muito simples, que ilustra bem uma >> comunicação bi-direcional. Não sei onde você está utilizando este código, >> mas eu recomendo muito cuidado. Existem vários problemas com código deste >> tipo (I/O Blocking, por exemplo) e uma enorme quantidade de coisas que podem >> ocorrer de errado. >> >> Tenho um livro (Networking Programming with Perl) de 700 páginas só >> falando de tudo que pode dar errado num código deste tipo e todas (ou quase) >> variações de servidores escrito em Perl (tcp, udp, I/O Blocking, I/O >> Nonblocking, forked, threaded). Utilizar print/getline, write/read, >> syswrite/sysread é apenas o começo das perguntas de arquitetura que temos >> que responder para um servidor. >> >> Se for possível, eu recomendo fortemente que você utilize um framework >> para fazer isto, tipo o POE ( >> http://poe.perl.org/?POE_Cookbook/TCP_Servers tem um exemplo do mesmo >> código que eu escrevi). Se não for possível, eu recomendo você dar uma >> olhada no livro que eu disse (posso emprestar se for o caso). Temos também o >> Mojolicious com os websocket (estou começando a ver isto), pode ser uma boa >> alternativa. >> >> - Preciso de protocolo específico para fazer isso ? >>> >> >> Uma conversa bi-direcional, você precisa definir os comandos que um vai >> aceitar do outro. Você terá que criar algum protocolo de qualquer maneira, >> uma linguagem que seja compreendida pelo servidor e cliente, qual como o >> HTTP, FTP ou SMTP. Na transferência de arquivo, recomendo fortemente no >> formato JSON. Aliais, este teu sistema não seria candidato para ser um >> webapp com RESTfull web services implementado em Catalyst ou Mojolicious ? >> Neste ambiente O URI é a função que recebe/retorna em JSON, sem view em html >> ! >> >> >>> - Eu vi algumas pessoas usando udp ao invés de tcp alegando aumento de >>> performance, mas abrindo mão de vários quesitos de segurança dentre outros >>> problemas. Confirma? >>> >>> >> Sim, o UDP é mais 'leve' do que o 'tcp'. Mas isto significa que você terá >> que tratar tudo relacionado a transferência de dados (ordem dos pacotes, >> perda dos pacotes, etc). Uma recomendação, a menos que você saiba muito bem >> o que está fazendo, e que o consumo de rede seja justificado, não utilize o >> UDP, o overhead para o programador não vale a pena. O HTTP utiliza TCP e >> ninguém pensou em mudar isto, não siga os líderes :D .... >> >> >>> Cheers! >>> >>> >>> -- >>> André Garcia Carneiro >>> Analista/Desenvolvedor Perl >>> (11)82907780 >>> >>> =begin disclaimer >>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>> SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org >>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>> =end disclaimer >>> >>> >> >> >> -- >> "o animal satisfeito dorme". - Guimarães Rosa >> >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> >> > > > -- > André Garcia Carneiro > Analista/Desenvolvedor Perl > (11)82907780 > > =begin disclaimer > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ > SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> > =end disclaimer > >
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: SaoPaulo-pm@pm.org L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer