[SP-pm] duvida sockets e select

Solli Honorio shonorio at gmail.com
Sun Nov 25 05:21:02 PST 2012


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
<tiago.peczenyj em gmail.com>escreveu:

> Eu quero fazer em perl puro antes de usar uma lib externa ate para
> comparar ;-)
> Em 25/11/2012 08:05, "Solli Honorio" <shonorio em gmail.com> 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 <tiago.peczenyj em gmail.com
>> > 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 <tiago.peczenyj em gmail.com>
>>>
>>>> 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: SaoPaulo-pm em 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 em 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 em pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20121125/ec130b6f/attachment-0001.html>


More information about the SaoPaulo-pm mailing list