Falando em AnyEvent e implementação de servidores. Olha que legal...
http://search.cpan.org/search?query=AnyEvent+Server&mode=all Cheers! <http://search.cpan.org/search?query=AnyEvent+Server&mode=all> Em 21 de maio de 2011 19:20, Andre Carneiro <[email protected]>escreveu: > Pois é pessoal. Por enquanto vou ficando com o AnyEvent mesmo. > > Fiz um esquema bem óbvio com o AnyEvent::Util, substituindo o fork() pelo > fork_call e configurando os callbacks. Funcionou muito bem, e ficou bem > fácil de tratar os sinais, além de ter reduzido o código significativamente. > Eu vou postar a solução depois( não estou com ela aqui.. : - p ) > > Desculpem pela demora no feedback. > > Obrigado pelas respostas! > > > Cheers! > > > > > Em 4 de maio de 2011 08:33, Andre Carneiro > <[email protected]>escreveu: > > Entendi... >> >> Valeu Ulisses! >> >> Vou dar uma olhada com certeza! >> >> >> Cheers! >> >> >> 2011/5/3 Ulisses-IBIZ <[email protected]> >> >>> sendo rapido (sem tempo, me desculpe); >>> >>> 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 >>> >>> mais em http://search.cpan.org/~rhandom/Net-Server-0.99/lib/Net/Server. >>> (veja >>> HOOKS) >>> >>> 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. >>> >>> la pelas tantas (depois de muito tempo) abandonamos o Net::Server::Fork e >>> fizemos um bem enxuto (mais leve, rapido). >>> >>> control-freak manja? nao gosto de surpresas..... >>> >>> >>> *From:* Solli Honorio <[email protected]> >>> *To:* [email protected] >>> *Sent:* Tuesday, May 03, 2011 5:53 PM >>> *Subject:* Re: [SP-pm] Socket - algumas questões: >>> >>> >>> >>> 2011/5/3 Ulisses-IBIZ <[email protected]> >>> >>> Desculpa, mas sou meio lento ... >>> >>> Net::Server ja usei por anos. >>>> >>> >>> ... isto significa que você recomenda, ou que você não recomenda ? Você >>> poderia dar a sua 'revisão' sobre o módulo ? >>> >>> >>>> AnyEvent nao conhecia. >>>> >>>> >>>> *From:* Stanislaw Pusep <[email protected]> >>>> *To:* [email protected] >>>> *Sent:* Tuesday, May 03, 2011 4:57 PM >>>> *Subject:* Re: [SP-pm] Socket - algumas questões: >>>> >>>> Existem outros frameworks, mais leves e mais específicos, tal como: >>>> http://search.cpan.org/~rhandom/Net-Server-0.99/ >>>> E... BEWARE UDP!!! Tive oportunidade de presenciar pacotes sendo >>>> perdidos e fora de ordem numa LAN, imagine em Internet! >>>> >>>> ABS() >>>> >>>> >>>> >>>> 2011/5/3 Andre Carneiro <[email protected]> >>>> >>>>> 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 <[email protected]> >>>>> >>>>>> >>>>>> >>>>>> >>>>>> 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: [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 >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> André Garcia Carneiro >>>>> Analista/Desenvolvedor Perl >>>>> (11)82907780 >>>>> >>>>> =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 >>>> >>>> >>>> =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 >>> >>> >> >> >> -- >> André Garcia Carneiro >> Analista/Desenvolvedor Perl >> (11)82907780 >> > > > > -- > André Garcia Carneiro > Analista/Desenvolvedor Perl > (11)82907780 > -- André Garcia Carneiro Analista/Desenvolvedor Perl (11)82907780
=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
