FRIHOSTFORUMSSEARCHFAQTOSBLOGSCOMPETITIONS
You are invited to Log in or Register a free Frihost Account!


Atualização Automática de Bancos de Dados





Aidmar
Olá a Todos!

Gente, a minha questão é a seguinte: Eu estou criando um site em php onde cada usuário vai estar registrado em um banco de dados MySql. Nesse banco de dados, um dos dados referentes ao usuário é o número de créditos que ele tem. Uma vez a cada 10 minutos (por exemplo), eu quero que o valor de créditos aumente em x unidades (x é um número qualquer, definido em outro campo do banco de dados). Ou seja: eu quero que ele ganhe x créditos a cada 10 minutos, ou outro tempo qualquer. Isso deve acontecer mesmo que o usuário não esteja conectado ao site. Eu pensei na seguinte solução: Eu poderia desenvolver um programinha (em Delphi, por exemplo) que se conectasse ao Banco de dados e fizesse essa atualização automaticamente de 10 em 10 minutos. Para isso, o programa deveria estar rodando 24 horas por dia no mesmo servidor em que o site (e o banco de dados) está hospedado. Detalhe: Não há realmente a necessidade de o banco de dados estar atualizado sempre, desde que os dados exibidos numa consulta (ou numa operação qualquer) estejam atualizados. Agora vêm os pepinos:

1º - Existe como fazer isso utilizando só php, ou alguma outra linguagem de scripts que seja aceita em servidores web? Se tiver, como eu faço isso???

2º - Ao contratar um serviço de hospedagem (pago ou gratuito), eu posso deixar um programa desse tipo rodando no servidor, se ele for bem pequeno? Existem serviços específicos para isso, ou eu teria que ter o meu próprio servidor em casa???

Pessoal, QUALQUER ajuda será bem-vinda!!!

Muito Obrigado a Todos!!!

Aidmar Junior
mariohs
Quote:
1º - Existe como fazer isso utilizando só php, ou alguma outra linguagem de scripts que seja aceita em servidores web? Se tiver, como eu faço isso???

Existe. Porém eu nunca fiz, mas em teoria deve funcionar. Utilize os cronjobs, que têm no seu próprio painel de controle. Eles usam o crontab do linux e funcionam como se fosse o task scheduler do windows.

Quote:
2º - Ao contratar um serviço de hospedagem (pago ou gratuito), eu posso deixar um programa desse tipo rodando no servidor, se ele for bem pequeno? Existem serviços específicos para isso, ou eu teria que ter o meu próprio servidor em casa???

Sim, desde que o serviço ofereça este tipo de funcionalidade.
Aidmar
Obrigado! E a FriHost oferece algum desses serviços?
mariohs
Como os 2 serviços estão interligados, posso responder que sim. O frihost oferece serviços de crontab. Vá no seu painel de controle e procure por cronjobs.
merrik
Duas sugestões:
1ªcriar um javascript para atualizar quando o usuario estiver logado
2ªmarcar o horario da ultima atualização e fazer um calculo para atualizar os pontos:
horario da vizualização - horario da ultima atualização / tempo que se espera para adicionar os pontos * quantidade de pontos
D'Artagnan
Keep it simple meu caro...

na minha opinião a solução que o merrik propos é mais simples e segura,
segura???

sim... por que se você usar um cron seu site vai estar exposto as condições do host a todo o tempo, se o servidor para seu cron para os pontos do usuario não são somados.

ja se vc desenolver um script que leve em conta um ponto no tempo X e fazer um calculo baseado nele o unico problema vai ser se alguém tiver a santissima ideia de trocar a hora do servidor.

se você usar o a ideia de disparar o script que calcula os pontos quando o usuario logar, você vai ter que tratar os usuarios que fiquem mais de 10 minutos logados, ou tratar o calculo dos pontos de outra forma.

mesmo assim eu acho a ideia de se basear em um "ponto fixo" (ultimo login, hora de cadastro) melhor , já que isso depende de um minimo de fatores externos e consome menos recursos.
Aidmar
A idéia é boa, mas eu pensei no seguinte, utilizando a idéia de vocês: E se eu criasse uma rotina para atualizar o banco de dados, que estivesse em todas as páginas? Assim, toda vez que alguém acessar o site ou navegar por ele, a cada nova página aberta ou visualizada o bd teria todos os campos atualizados de uma só vez. Haveria algum problema nisso??? Inclusive, quanto aos cronjobs, eu estive pesquisando e em sites como o www.ryudragon.com.br e o www.ogame.com.br utilizam esse recurso como alicerce do jogo. Ah, e a minha dúvida é com relação a esse tipo de jogo mesmo. Estou desenvolvendo um, no mesmo estilo dos citados acima, e eu não sei como vou fazer para gerenciar a produção dos recursos dos jogadores. Recomendo que façam o cadastro nos jogos acima (é gratuito), só para vocês terem uma idéia do que é realmente, para que possamos discutir mais sobre o assunto.

Obrigado a Todos!!!
Aidmar Junior
D'Artagnan
Quote:
A idéia é boa, mas eu pensei no seguinte, utilizando a idéia de vocês: E se eu criasse uma rotina para atualizar o banco de dados, que estivesse em todas as páginas? Assim, toda vez que alguém acessar o site ou navegar por ele, a cada nova página aberta ou visualizada o bd teria todos os campos atualizados de uma só vez. Haveria algum problema nisso???


pra ideia de manter os pontos do usuario é bem mais inteligente que usar o login, assim o usuario atualisa a pagina e tem os pontos atualisados.

-----------

nunca pesquisei o funcionamento do ogame não (apesar de ser viciande pra *****)

mas a situação aqui é umpouco difernete, já que eles precisam manter o sincronismo entre os jogadores, o tempo em que os pontos são somados é global, não pode depender da ação de alguém.
como eles fazem pra manter o sincronismo durante as manutenções eu não faço ideia.

aqui é mais confiavel usar o cron, porque as ações que os jogadores vão tomar vao ter base no calculo dos pontos, o tempo nesse caso é = pra todos.
Aidmar
Aí gente, resolvi o problema da seguinte maneira: Como eu tive alguns problemas pra botar o cronjobs pra funcionar, coloquei uma instrução php no início de cada página pra atualizar o bd caso a última atualização tenha sido a mais de 10 minutos. O jogo vai trabalhar com intervalos de 10 minutos. O código é esse:
Quote:

$atu = mysql_query ("select * from atualiza");
$ultima = mysql_fetch_array ($atu);
$atual = date("U");
$diferenca = $atual - $ultima[1];
if ($diferenca >= 600){
$minutos = floor($diferenca/600);
$resto = $diferenca % 600;
$metal = mysql_query("update territorios set METAL = METAL+((MINAMETAL*2)*'$minutos'), CRISTAL = CRISTAL+((MINACRISTAL*2)*'$minutos'), COMBUST = COMBUST+((REFINARIA*2)*'$minutos') where NOME <> '--' ");
$atualiza = mysql_query("update atualiza set HORA='$atual'-'$resto'");

Entenderam? O que acharam??? Por enquanto, o único problema é que, ao carregar a página, o banco de dados é atualizado mas a página não mostra os dados atualizados, só na próxima exibição (se eu der um refresh ou ir para outra página, por exemplo). Acho que ficou bom assim...rs. Se alguém quiser melhorar algo, ou ajudar de alguma forma, fiquem á vontade!!!

Obrigado a todos!
Related topics
Open source - uma paixão
Como vocês descobriram o Frihost?
Como Hospedar um Site na Internet
[Contas] Saiba tudo sobre a frihost
PHP ligações a bases de dados
Qual o melhor cms?
Segredos da microsoft
[INFORMÁTICA] Antivírus e Anti-pragas
Mural de Recados
Qual a melhor ferramenta para criar web sites?
GNU/Linux, por que não usar?
Segunda - 18/12 - Protesto contra Aumento dos Parlamentares
DirectAdmin para cPanel
[Banco de dados] previsão para atualizar?
Reply to topic    Frihost Forum Index -> Language Forums -> Portuguese

FRIHOST HOME | FAQ | TOS | ABOUT US | CONTACT US | SITE MAP
© 2005-2011 Frihost, forums powered by phpBB.