Entendi...<div><br></div><div>Valeu Ulisses!</div><div><br></div><div>Vou dar uma olhada com certeza!</div><div><br></div><div><br></div><div>Cheers!<br><br><div class="gmail_quote">2011/5/3 Ulisses-IBIZ <span dir="ltr"><<a href="mailto:ulisses@ibiz.com.br">ulisses@ibiz.com.br</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">





<div bgcolor="#ffffff">
<div><font size="2" face="Arial">sendo rapido (sem tempo, me desculpe);</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">se usei 'por anos' => serviu aos meus propositos 
e recomendo (mas cada um deve validar por si só) pela facilidade de adicionar 
hooks (suas subs) para configurar o que deve ser feito durante a conversa 
socket</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">mais em <a href="http://search.cpan.org/~rhandom/Net-Server-0.99/lib/Net/Server." target="_blank"><font size="3" face="Times New Roman">http://search.cpan.org/~rhandom/Net-Server-0.99/lib/Net/Server.</font></a> (veja 
HOOKS)</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">usamos o Net::Server::Fork para receber requisicoes 
de cliente (eram transacoes contendo infos para busca em portais de validacao de 
credito PF e PJ), consulta via robo Web em portais pagos e nao pagos (Serasa, 
SPC, telefonicas, .....), montavamos um 'laudo de credito' e devolviamos a 
resposta no socket.</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">la pelas tantas (depois de muito tempo) abandonamos 
o Net::Server::Fork e fizemos um bem enxuto (mais leve, rapido).</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">control-freak manja? nao gosto de 
surpresas.....</font></div>
<div><font size="2" face="Arial"></font> </div>
<blockquote style="border-left:#000000 2px solid;padding-left:5px;padding-right:0px;margin-left:5px;margin-right:0px">
  <div style="font:10pt arial;background:#e4e4e4"><b>From:</b> 
  <a title="shonorio@gmail.com" href="mailto:shonorio@gmail.com" target="_blank">Solli Honorio</a> 
  </div><div class="im">
  <div style="font:10pt arial"><b>To:</b> <a title="saopaulo-pm@mail.pm.org" href="mailto:saopaulo-pm@mail.pm.org" target="_blank">saopaulo-pm@mail.pm.org</a> </div>
  </div><div style="font:10pt arial"><b>Sent:</b> Tuesday, May 03, 2011 5:53 PM</div><div><div></div><div class="h5">
  <div style="font:10pt arial"><b>Subject:</b> Re: [SP-pm] Socket - algumas 
  questões:</div>
  <div><br></div><br><br>
  <div class="gmail_quote">2011/5/3 Ulisses-IBIZ <span dir="ltr"><<a href="mailto:ulisses@ibiz.com.br" target="_blank">ulisses@ibiz.com.br</a>></span></div>
  <div class="gmail_quote"><br></div>
  <div class="gmail_quote">Desculpa, mas sou meio lento ...</div>
  <div class="gmail_quote"><span dir="ltr"></span><br>
  <blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex" class="gmail_quote">
    <div bgcolor="#ffffff">
    <div><font size="2" face="Arial">Net::Server ja usei por 
  anos.</font></div></div></blockquote>
  <div><br></div>
  <div>... isto significa que você recomenda, ou que você não recomenda ? Você 
  poderia dar a sua 'revisão' sobre o módulo ? </div>
  <div> </div>
  <blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex" class="gmail_quote">
    <div bgcolor="#ffffff">
    <div><font size="2" face="Arial">AnyEvent nao conhecia.</font></div>
    <div> </div>
    <blockquote style="border-left:#000000 2px solid;padding-left:5px;padding-right:0px;margin-left:5px;margin-right:0px">
      <div style="font:10pt arial;background:#e4e4e4"><b>From:</b> <a title="creaktive@gmail.com" href="mailto:creaktive@gmail.com" target="_blank">Stanislaw Pusep</a> </div>
      <div style="font:10pt arial"><b>To:</b> <a title="saopaulo-pm@mail.pm.org" href="mailto:saopaulo-pm@mail.pm.org" target="_blank">saopaulo-pm@mail.pm.org</a> </div>
      <div style="font:10pt arial"><b>Sent:</b> Tuesday, May 03, 2011 4:57 
      PM</div>
      <div style="font:10pt arial"><b>Subject:</b> Re: [SP-pm] Socket - algumas 
      questões:</div>
      <div>
      <div></div>
      <div>
      <div><br></div>
      <div>Existem outros frameworks, mais leves e mais específicos, tal 
      como: <a href="http://search.cpan.org/~rhandom/Net-Server-0.99/" target="_blank">http://search.cpan.org/~rhandom/Net-Server-0.99/</a></div>
      <div>E... BEWARE UDP!!! Tive oportunidade de presenciar pacotes sendo 
      perdidos e fora de ordem numa LAN, imagine em 
      Internet!</div><br>ABS()<br><br><br><br>
      <div class="gmail_quote">2011/5/3 Andre Carneiro <span dir="ltr"><<a href="mailto:andregarciacarneiro@gmail.com" target="_blank">andregarciacarneiro@gmail.com</a>></span><br>
      <blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex" class="gmail_quote">Oi Solli! 
        <div><br></div>
        <div><br></div>
        <div>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.</div>
        <div><br></div>
        <div><br></div>
        <div>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. </div>
        <div><br></div>
        <div><br></div>
        <div>Sobre o livro, já tá na minha lista desse ano para comprar.</div>
        <div><br></div>
        <div><br></div>
        <div>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</div>
        <div><br></div>
        <div><br></div>
        <div>Thx a lot!</div>
        <div><br></div>
        <div><br></div>
        <div>Cheers!</div>
        <div>
        <div></div>
        <div>
        <div><br></div>
        <div><br></div>
        <div><br></div>
        <div><br></div>
        <div><br>
        <div class="gmail_quote">2011/5/3 Solli Honorio <span dir="ltr"><<a href="mailto:shonorio@gmail.com" target="_blank">shonorio@gmail.com</a>></span><br>
        <blockquote style="border-left:#ccc 1px solid;margin:0px 0px 0px 0.8ex;padding-left:1ex" class="gmail_quote"><br><br>
          <div class="gmail_quote">
          <div><br></div>
          <div><span style="font-family:courier new,monospace">Uma das maneiras 
          é assim : </span><br><br><code><br><br><span style="font-family:courier new,monospace">#!/usr/bin/env perl  
          </span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">use strict;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">use 
          IO::Socket::INET;</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">my $quit = 0;</span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">$SIG{INT} = sub { $quit++ 
          };</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">my $listen_socket = 
          IO::Socket::INET->new(LocalPort => 2121,</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                                        
          Listen    => 2,</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                                        
          Proto     => 'tcp',</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">                                        
          Reuse     => 1,) or die "$!";</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">while ( !$quit ) 
          {</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">  next unless my 
          $connection = $listen_socket->accept;   </span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">  defined ( my $child 
          = fork() ) or die "Can't fork: $!";</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">  if ( $child == 0 ) 
          {</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    
          $listen_socket->close;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    
          do_something($connection);</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    exit 
          0;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">  }</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace"> </span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">  
          $connection->close;</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">}                    
          </span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">sub do_something 
          {</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">  my $socket = 
          shift;   </span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">  
          $socket->autoflush(1);</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">  
          $socket->print("Entre com os numeros para calculo:\n");</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">  while ( 1 ) 
          {</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    my 
          $input = $socket->getline();</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    exit 0 
          if $input =~ /quit/i;   </span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    
          $socket->print($input);</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">  }</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">   </span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">}  </span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><code><br> <br><span style="font-family:courier new,monospace">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. <br><br>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.</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">Se for possível, eu 
          recomendo fortemente que você utilize um framework para fazer isto, 
          tipo o POE (<a href="http://poe.perl.org/?POE_Cookbook/TCP_Servers" target="_blank">http://poe.perl.org/?POE_Cookbook/TCP_Servers</a> 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.</span><br><br></div>
          <div>
          <blockquote style="border-left:rgb(204,204,204) 1px solid;margin:0pt 0pt 0pt 0.8ex;padding-left:1ex" class="gmail_quote">
            <div>- Preciso de protocolo específico para fazer isso 
          ?</div></blockquote></div>
          <div><br><span style="font-family:courier new,monospace">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 !</span><br> </div>
          <div>
          <blockquote style="border-left:rgb(204,204,204) 1px solid;margin:0pt 0pt 0pt 0.8ex;padding-left:1ex" class="gmail_quote">
            <div>- 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?</div>
            <div><br></div></blockquote></div>
          <div><br><span style="font-family:courier new,monospace">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 ....  </span><br><br></div>
          <blockquote style="border-left:rgb(204,204,204) 1px solid;margin:0pt 0pt 0pt 0.8ex;padding-left:1ex" class="gmail_quote">
            <div>
            <div></div>
            <div><br></div>
            <div>Cheers!</div>
            <div><br></div><font color="#888888">
            <div><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor 
            Perl<br>(11)82907780<br></div></font><br></div>
            <div>=begin disclaimer<br>  Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br> SaoPaulo-pm 
            mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br> L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end 
            disclaimer<br><br></div></blockquote></div><font color="#888888"><br><br clear="all"><br>-- <br>"o animal satisfeito dorme". - Guimarães 
          Rosa<br></font><br>=begin disclaimer<br>  Sao Paulo Perl Mongers: 
          <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br> SaoPaulo-pm 
          mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br> L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end 
          disclaimer<br><br></blockquote></div><br><br clear="all"><br>-- <br>André 
        Garcia Carneiro<br>Analista/Desenvolvedor 
        Perl<br>(11)82907780<br></div></div></div><br>=begin 
        disclaimer<br>  Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br> SaoPaulo-pm mailing 
        list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br> L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end 
        disclaimer<br><br></blockquote></div><br></div></div>
      <p></p>
      <hr>

      <div>
      <p></p>=begin disclaimer<br>   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br> SaoPaulo-pm mailing 
      list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br> L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end 
      disclaimer<br></div>
      <p></p></blockquote></div><br>=begin disclaimer<br>  Sao Paulo Perl 
    Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br> SaoPaulo-pm mailing 
    list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br> L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end 
    disclaimer<br><br></blockquote></div><br><br clear="all"><br>-- <br>"o animal 
  satisfeito dorme". - Guimarães Rosa<br>
  </div></div><p>
  </p><hr><div class="im">

  <p></p>=begin disclaimer<br>   Sao Paulo Perl Mongers: 
  <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br> SaoPaulo-pm mailing list: 
  <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br> L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>=end 
  disclaimer<br></div><p></p></blockquote></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br><br clear="all"><br>-- <br>André Garcia Carneiro<br>Analista/Desenvolvedor Perl<br>(11)82907780<br>
</div>