2011/5/3 Ulisses-IBIZ <ulis...@ibiz.com.br> Desculpa, mas sou meio lento ...
Net::Server ja usei por anos. > ... isto significa que você recomenda, ou que você não recomenda ? Você poderia dar a sua 'revisão' sobre o módulo ? > AnyEvent nao conhecia. > > > *From:* Stanislaw Pusep <creakt...@gmail.com> > *To:* saopaulo...@mail.pm.org > *Sent:* Tuesday, May 03, 2011 4:57 PM > *Subject:* Re: [SP-pm] Socket - algumas questões: > > 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 > > > =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