Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tobias Spellmeier Lucian

Uso de i/o com PHP + SQL

Recommended Posts

Olá galera... sou extremamente novo no php, estou usando apenas pois programo pra android.

 

Então, estou querendo fazer um jogo de cartas que utiliza banco de dados SQL acessado através do PHP... Mas ai começa o problema:

 

Eu teria que obter os dados do PHP a cada segundo ou dois segundos mais ou menos, para que o jogo fosse fluido. Porém estou desenvolvendo e durante as requisições do PHP no android às vezes rola uma instabilidade, ou algumas vezes demora até 20 segundos para obter as informações do php, sendo que ele retorna um JSON de no máximo 1kb, e na página do php utilizo apenas alguns query's...

 

 

A questão é: É possível com um serviço de host que permita i/o de 4096kb/s e 20 processos simultâneos, fazer um jogo estável para umas 100 ou 200 pessoas jogarem simultaneamente enviando requisições a cada segundo? Se não, como se fazem jogos em tempo real??

Obrigado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A questão é: É possível com um serviço de host que permita i/o de 4096kb/s e 20 processos simultâneos, fazer um jogo estável para umas 100 ou 200 pessoas jogarem simultaneamente enviando requisições a cada segundo? Se não, como se fazem jogos em tempo real??

 

O problema neste caso não é nem o número de usuários usando o jogo e sim o número de requisições.

 

Se você precisa trafegar dados com atualização a cada segundo talvez fosse mais interessante usar Comet e, neste caso, o PHP não seria o mais recomendado, eu tentaria usar o Node.js.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deste de seja bem projetado.

Como ja mencionando no #2 o uso de commet ou outras técnicas como long polling podem ajudar a diminuir a latencia com relação as requisições.

O uso de cache para guardar estado de um jogo no lugar do banco de dados tambem pode ser levado em conta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para fazer um benchmark real, utilize xDebug com KCachegrind ou webgrind.

 

E uma boa seria usar um banco não relacional (NoSQL), como o MongoDb principalmente porque os NoSQL são muito mais rápidos do que os relacionais e nesse caso você não precisaria de ACID.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra esclarecer bem, o memory_get_usage(); indica o i/o utilizado também?

A latência não é um problema, o problema é a capacidade do php, a latencia vai poder girar em 3, 4 ou 5 segundos entre uma resposta e outra... E lembrando, é para android, então tem que existir uma integração =s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá galera... sou extremamente novo no php, estou usando apenas pois programo pra android.

 

Então, estou querendo fazer um jogo de cartas que utiliza banco de dados SQL acessado através do PHP... Mas ai começa o problema:

 

Eu teria que obter os dados do PHP a cada segundo ou dois segundos mais ou menos, para que o jogo fosse fluido. Porém estou desenvolvendo e durante as requisições do PHP no android às vezes rola uma instabilidade, ou algumas vezes demora até 20 segundos para obter as informações do php, sendo que ele retorna um JSON de no máximo 1kb, e na página do php utilizo apenas alguns query's...

 

 

A questão é: É possível com um serviço de host que permita i/o de 4096kb/s e 20 processos simultâneos, fazer um jogo estável para umas 100 ou 200 pessoas jogarem simultaneamente enviando requisições a cada segundo? Se não, como se fazem jogos em tempo real??

 

Obrigado!!

 

Tobias Spellmeier Lucian, talvez fosse mais vantagem implementar um socket via PHP, isso se você tiver acesso a execução do script direto pelo linux, pois com sockets você não teria o gasto de tráfego com o blablabla do protocolo HTTP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguem sabe como se calcula quanto de processamento é utilizado em uma página php?

Já percebi que a latência não vai ser problema, 1, 2 segundos para a resposta do servidor está ok. Mas meu servidor aguenta 20 processos simultâneos e um "i/o" de 4096kb/s... Se não der pra calcular da página toda, uma idéia de quanto uma query ocupa de i/o?

E, noob eu, mas oq são esses sockets exatamente o posso integrá-los ao mysql?

Obrigado pela ajuda de todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quero fazer um teste de quantas vezes uma página php pode ser requisitada por segundo... fiz um teste de tempo com o microtime(); e resultou em 0.00160002708435 microsegundos o.o isso não pode estar certo né?

Ou quer dizer que a cada 0.00160002708435 microsegundos o servidor aguenta outra atualização? isso daria muuuuita capacidade o.o

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o Enrico comentou no post #9 o correto não é fazer o teste no próprio PHP, pois ele não é exato.

 

Com microtime você consegue verificar o tempo de execução do script, mas nada garante que ao ter muitas requisições simultâneas a execução será feita com o mesmo tempo, pois o servidor pode estar sobrecarregado.

 

Para saber quantas requisições simultâneas o servidor aguenta você precisa fazer um teste de stress.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.