<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></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 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">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 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">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 class="h5">
  <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 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>"o animal satisfeito dorme". - Guimarães Rosa<br>