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