Este livro http://www.amazon.com/Network-Programming-Perl-Lincoln-Stein/dp/0201615711tem tudo que vocês precisa sobre este assunto e não sabia :D !
Abraços, Solli Honorio Em 25 de novembro de 2012 10:55, Tiago Peczenyj <[email protected]>escreveu: > Eu quero fazer em perl puro antes de usar uma lib externa ate para > comparar ;-) > Em 25/11/2012 08:05, "Solli Honorio" <[email protected]> escreveu: > > Tiago, >> >> Sei que você é macaco velho, por isto não vou perguntar se você já >> considerou a utilização de um framework (POE, Mojo ou Net::Server por >> exemplo) para este trabalho, e nem enumerar todas as vantagens que estes >> framework tem em relação em codificar manualmente. >> >> Com relação a tua dúvida, você terá que criar uma área de buffer para >> armazenar a parte que ainda não está completa, tipo assim : >> >> <code> >> >> ... >> $content_from_client = qq/${buffer_from_server}${content_from_client >> }/; >> my $rindex = rindex $content_from_client, qq/\n/; >> $buffer_from_server = substr $content_from_client, ++$rindex; >> >> ... >> >> </code> >> >> Como vc está observando, a vida de um server não é simples. A >> reconstrução dos dados é um trabalho penoso e quase mágico (e nem estamos >> falando de acesso blocking/non-blocking, gerenciamento de forks/threads, >> etc), e é por isto e outras coisas que os frameworks são recomendadíssimo. >> >> Abraços, >> >> Solli Honorio >> >> >> Em 24 de novembro de 2012 19:52, Tiago Peczenyj <[email protected] >> > escreveu: >> >>> Ok >>> >>> Recebi a dica de usar sysread e "funciona" >>> >>> entretanto o meu problema é: eu tenho um protocolo orientado a linhas, >>> cada linha é um "evento" que eu preciso processar. posso pegar uma linha >>> pela metade e eu teria que guardar para "emendar" no proximo loop. >>> >>> pensei em algo como >>> >>> >>> >>> while ($buf =~ s/^(.*)\n//) { >>> process_message("$1"); >>> } >>> >>> mas como eu faço na situação >>> >>> envio >>> >>> linha1 >>> linha2 >>> linha3 >>> >>> e quando leio... >>> >>> buffer => "linha1\r\nlin"; >>> >>> eu preciso guardar o "lin" pra proxima fase. tem alguma forma menos >>> obscura de faze-lo? >>> >>> 2012/11/24 Tiago Peczenyj <[email protected]> >>> >>>> Ola Galera >>>> >>>> Eu tenho algo mais ou menos assim >>>> >>>> https://gist.github.com/4141422 >>>> >>>> O que acontece é que, se eu fizer >>>> >>>> bash$ (echo "xxx" ;sleep 30 ; echo "yyy") | nc localhost 9090 >>>> >>>> ta de boa, o xxx e o yyy são impressos em momentos distintos mas >>>> >>>> bash$ (echo -n "xxx" ;sleep 30 ; echo "yyy") | nc localhost 9090 >>>> >>>> O server TRAVA enquanto >>>> >>>> Agora o que acontece: eu tenho que escutar em outra porta (otimi o >>>> codigo mas basicamente eu inicio outro IO::Socket::INET em outra porta e >>>> trato dentro do main loop) outros clientes e fazer coisas divertidas com >>>> eles. com o server travado eu não faço mais nada. >>>> >>>> achei q era o getline mas substituindo por getc para ler caracter a >>>> caracter eu só consigo ler o primeiro antes de travar. >>>> >>>> alguma ideia? >>>> >>>> outra coisa, eu suportamente tenho que ler um protocolo simples, uma >>>> linha com um padrão, como >>>> >>>> a|b|c|d\r\n >>>> >>>> então o getline me é util, não achei outra forma de brincar com um >>>> buffer sem ficar maluco. alias eu deveria suportar utf-8 na entrada porem >>>> eu não vi diferença no binmode, tem algum truque? estou esquecendo de algo? >>>> o common::sense ja faz algo por mim? >>>> >>>> Obrigado >>>> >>>> >>>> >>>> -- >>>> Tiago B. Peczenyj >>>> Linux User #405772 >>>> >>>> http://pacman.blog.br >>>> >>> >>> >>> >>> -- >>> Tiago B. Peczenyj >>> Linux User #405772 >>> >>> http://pacman.blog.br >>> >>> =begin disclaimer >>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>> SaoPaulo-pm mailing list: [email protected] >>> 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: [email protected] >> 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: [email protected] > 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: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
