Hilkias 0 Denunciar post Postado Janeiro 16, 2012 Bom estou tentando fazer um projeto, mais estou com duvida sobre uma parte. Exemplo: No Naruto game, e Naruto arena tem esses funcionamento mais não faço nem ideia como seria isso em php. Bom como no Naruto game, um jogador cria uma luta, e fica uma tela aguardando a ação de outro usuário, quando outro jogador aceitar a batalha a outra tela do cliente é carregada e a de quem aceitou também. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 16, 2012 Bom estou tentando fazer um projeto, mais estou com duvida sobre uma parte. Exemplo: No Naruto game, e Naruto arena tem esses funcionamento mais não faço nem ideia como seria isso em php. Bom como no Naruto game, um jogador cria uma luta, e fica uma tela aguardando a ação de outro usuário, quando outro jogador aceitar a batalha a outra tela do cliente é carregada e a de quem aceitou também. Sockets, Loong Polling .. não é com PHP, é JavaScript. Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Janeiro 16, 2012 Ajax + Banco de dados 1) Quando um jogador entra, deve ser marcado algum campo em algum banco de dados 2) A tela deste jogador fica aguardando e consultando o banco de dados via Ajax pra saber se outro jogador já se registrou 3) Quando o ajax vê que o outro já foi registrado, libera. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 16, 2012 Ajax + Banco de dados 1) Quando um jogador entra, deve ser marcado algum campo em algum banco de dados 2) A tela deste jogador fica aguardando e consultando o banco de dados via Ajax pra saber se outro jogador já se registrou 3) Quando o ajax vê que o outro já foi registrado, libera. Se você quiser fritar o servidor .. cara, esse tipo de coisa é complicada por dois motivos, se você ficar enviando requisições diretas, e o servidor ficar respondendo 'Não se registrou' , 'Não se registrou' , 'Não se registrou' .. você vai ter um tráfego de dados enorme, a ponto de fritar a máquina do cliente também.. Um Long Polling é diferente disso, você envia uma requisição, e ela fica aberta até que o servidor responda, ou seja .. não emite o Http Code 200 dado como finalizada a requisição até ter a informação esperada. Pra esse tipo de coisa, ( o que ele pretende fazer ) , é bom que exista um intevalo de consultas ao banco, entre o servidor que segura a resposta, porque ? se não vai ficar consultando toda hora, e o banco vai dizer a mesma coisa .. daí já alivia o cliente, mas pesa o servidor, esse intervalo, pode ser definido em segundos, como 'aguarde 30 segundos e tente novamente', durante 30 segundos, o servidor monitora esse usuário, daí pra monitorar novamente, uma nova requisição deve ser enviada. ;) Compartilhar este post Link para o post Compartilhar em outros sites
micox 2 Denunciar post Postado Janeiro 16, 2012 Pra esse tipo de coisa, ( o que ele pretende fazer ) , é bom que exista um intevalo de consultas ao banco, entre o servidor que segura a resposta, porque ? se não vai ficar consultando toda hora, e o banco vai dizer a mesma coisa .. daí já alivia o cliente, mas pesa o servidor, esse intervalo, pode ser definido em segundos, como 'aguarde 30 segundos e tente novamente', durante 30 segundos, o servidor monitora esse usuário, daí pra monitorar novamente, uma nova requisição deve ser enviada.Exatamente o que penso que ele fará com o ajax (é o que faço). Não mando a requisição ajax a cada segundo, mas a cada 15 segs. Não é preciso fritar o servidor nem o cliente. :) Já Long Polling não conheço. Googlarei, valeu :) Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 16, 2012 Exatamente. Com ajax (javascript) dá pra se fazer isso. Dá até da .. mas é complicado, ainda mais com PHP ( que não ajuda nem um pouco ), você tem que manter o readyState 3, e utiliza alguma estratégia pra monitorar esse status, depois que você envia a requisição, e ela volta como Http 200 OK, já era .. você perdeu a conexão com o servidor, daí só fazendo outra .. o conceito do Long Polling é exatamente evitar isso, que esse 'Http 200 OK' seja emitido sem obter a resposta esperada, e se não temos 'Http 200 OK', nossa conexão fica pendente, aguardando resposta .. e ainda se torna amigável ( ao invés de chata , que ficaria perguntando toda hora ) .. me faz lembrar o Burro do Shrek O Bacana é fazer um daemon com Node.JS em um servidor, e ficar escutando as notificações dele, long polling também .. Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Janeiro 16, 2012 desculpe andrey, mas o apache nao tem uma configuracao (padrao) q mantem as conexoes abertas durante um tempo (acho q eh o keepAlive) ? normalmente eh por 30 segundos, eu sei q quando eu uso com AIR, na primeira chamada ele demora pois esta abrindo a conexao, depois fica rapido, porem ao deixar de usar o air por uns 3min, o servidor demora a responder de novo, pois vai abrir outra conexao... Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 16, 2012 Não é isso Igor, estou falando sobre long-polling, e você de page request timeout. Trata-se de manter uma conexão aberta com um requisitante Http , como XmlHttp .. e essa conexão ser fechada somente quando receber a resposta esperada. Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Janeiro 17, 2012 nao, nao, o Timeout da pagina eh outra configuração....da uma olhada na documentação do apache.... Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 17, 2012 na primeira chamada ele demora pois esta abrindo a conexao, depois fica rapido, porem ao deixar de usar o air por uns 3min, o servidor demora a responder de novo, pois vai abrir outra conexao... :seta: nao, nao, o Timeout da pagina eh outra configuração....da uma olhada na documentação do apache.... Certo, isso não é long polling, eu não quero que demore 3 minutos pra responder, quero que responda quando houver a resposta requisitada , é diferente, e também, quero que abra uma NOVA requisição, quando a última já obteve resposta, então .. vou esperar novamente por outra resposta, e fazer o mesmo processo novamente .. ! Compartilhar este post Link para o post Compartilhar em outros sites
Dii 15 Denunciar post Postado Janeiro 17, 2012 Just one word. WebSockets ^^ Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 17, 2012 Just one word. WebSockets ^^ Simples não .. !? porém não funciona em todos os navegadores, e WebSockets só é implementado no HTML5, todos os outros existentes, utilizam estratégias como jSONP, Long Poll, entre outras .. e mesmo assim, com PHP não fica grandes coisa, Node.JS é muito mais eficiente. Compartilhar este post Link para o post Compartilhar em outros sites
Dii 15 Denunciar post Postado Janeiro 17, 2012 Sim, é o único problema do WebSockets D: Nem todos os navegadores funcionam, somente o Chrome e o Safari atualmente. E what?! Com PHP não fica grandes coisa? DD: - Não fale assim! Se o programador souber manter um excelente tunning no servidor, fica uma coisa sooo big. D: Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Janeiro 17, 2012 Andrey, acho q nao leu direito, ou eu me expressei mal, o keepalive mantém a conexão aberta por determinado tempo, o Timeout eh outra configuração...da uma relida nas minhas respostas por favor, se nao tiver entendido eu explico d novo...veja que são coisas diferentes... o post foi editado por eu supostamente ter trocado o nome do membro, eu peço desculpas, mas eu estava no iPad, e faz extrema questao de correcao ortografica, nao reconheceu o nome 'andrey'... Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 17, 2012 E what?! Com PHP não fica grandes coisa? DD: - Não fale assim! Se o programador souber manter um excelente tunning no servidor, fica uma coisa sooo big. D: O Problema são as Threads, node.js utiliza threads não concorrentes, isso faz a engine ficar muito eficiente Andrey, acho q nao leu direito, ou eu me expressei mal, o keepalive mantém a conexão aberta por determinado tempo, o Timeout eh outra configuração...da uma relida nas minhas respostas por favor, se nao tiver entendido eu explico d novo...veja que são coisas diferentes... Acho que vou ficar com a opção dois, explique de novo então ! Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Janeiro 17, 2012 Será que rola um exemplo, tanto do lado PHP quanto do lado JavaScript? Ainda não consegui captar mentalmente um cenário pra isso e, imagino que num futuro não muito distante eu precise disso. Compartilhar este post Link para o post Compartilhar em outros sites
visitante_php 0 Denunciar post Postado Janeiro 17, 2012 quando você faz uma requisicao ao apache ( e gostaria de dizer q o servidor web, eu espicifico como apache, nao cito nem faço referencia a nenhum outro) ele mantem esta requisicao aberta, de acordo com a configuracao...a KeepAlive..pelo q eu entendi o long poll faz uma requisicao e a mantem aberta...o apache tb tem como fazer isto... http://httpd.apache..../keepalive.html http://www.vivaolinu...x-%28prefork%29 eu citei um exemplo q eu vivo no meu dia a dia, fiz um aplicativo em flex/air quando você loga ele demora uns 15seg pra abrir a conexao ( o host eh remoto), mas depois q loga a listagem da dados, e cadastro repetidos ficam rapidos, pq? pq o apache mantem a conexao aberta, mas se você parar de usar o aplicativo por uns 3 minutos, ele ja tera q abrir outra requisicao, dae demora de novo...veja os links, por favor.. OBS no cliente eu uso flex/air, no servidor eu uso php... Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Janeiro 17, 2012 Então nesse caso, para o jogo proposto no início do tópico (para não fugirmos do escopo) seria uma combinação do KeepAlive com o KeepAliveTimeout, sendo primeiro com valor 2 (dois jogadores) e o segundo o quê? 30 segundos seriam suficientes? Mas e quanto ao PHP? Precisaria de algo a mais para que, por exemplo, conexão ao banco não seja feita desnecessáriamente? Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Janeiro 17, 2012 Talvez essa introdução ao assunto auxilie no tópico: :seta: http://forum.imasters.com.br/topic/454444-long-polling/ Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Janeiro 18, 2012 Será que rola um exemplo, tanto do lado PHP quanto do lado JavaScript? Ainda não consegui captar mentalmente um cenário pra isso e, imagino que num futuro não muito distante eu precise disso. Não é em PHP, é em Node.JS .. https://github.com/andreyknupp/Code52/ Compartilhar este post Link para o post Compartilhar em outros sites