Jump to content

[metin2] contador jogadores online


tierrilopes

Recommended Posts

Contador para jogadores online.

Hoje em dia, a maioria dos websites, cada vez que a página é carregada executa uma query para obter os jogadores online consoante o last_play.

Isto pode ser abusado para sobrecarregar a base de dados.

 

Uma alternativa bastante simples e rápida de implementar é fazer com que esta query só seja executada uma vez a cada 5minutos por exemplo, independentemente do número de acesso na página.

 

 

Para tal, criar este ficheiro na base do vosso dedicado (será usado /cron_online.php como exemplo) e colar o seguinte conteúdo:

 

 

 

 


<?php
/*Tierri LopesAbyssMt2 CMS
https:/tlthings.net*/
//Localização do ficheiro de dump
$dumpFile = "/usr/local/www/apache24/data/dump_cache.php";
//Ligação à base de dados
$con =mysqli_connect("localhost","utilizador","password","player"); //ip, user, password, db
//Aviso em caso de erro ao ligar à base de dados
if (mysqli_connect_errno()){echo "Failed to connect to MySQL: " . mysqli_connect_error();}

//Jogadores nos últimos 5 minutos
$sql = mysqli_query($con, "SELECT COUNT(*) FROM player WHERE last_play > DATE_SUB(NOW(), INTERVAL 5 MINUTE)");
$online5m = mysqli_fetch_array($sql);

//Jogadores nas últimas 24 horas
$sql2 = mysqli_query($con, "SELECT COUNT(*) FROM player WHERE last_play > DATE_SUB(NOW(), INTERVAL 1 DAY)");
$online1d = mysqli_fetch_array($sql2);
//Escrever conteúdo do ficheiro dump_cache
$file = fopen($dumpFile, "w");
fwrite($file, "<?php\n\n");
fwrite($file, " /* Gerado pelo cron */\n\n");
fwrite($file, " \$online5m = \"{$online5m[0]}\";\n");
fwrite($file, " \$online1d = \"{$online1d[0]}\";\n");
fwrite($file, "\n\n?>");
fclose($file);
//Limpar resultado da query de 5 minutos
mysqli_free_result($sql);
//Limpar resultado da query de 24 horas
mysqli_free_result($sql2);
//Fechar ligação à base de dados
mysqli_close($con);?>
 

 

 

 

 

Ajustar a localização do ficheiro dump_cache.php (caso seja diferente)

Preencher os dados de ligação à base de dados e gravar o ficheiro.

Criar um ficheiro vazio chamado dump_cache.php (na localização definida no código acima) e dar-lhe permissões 646.

 

Abrir o ficheiro /etc/crontab

Debaixo de:

 

# Save some entropy so that /dev/random can re-seed on boot.*/11 * * * * operator /usr/libexec/save-entropy
 

 

 

 

Colar isto debaixo:

 

#Jogadores online metin2*/5 * * * * php /cron_online.php >/dev/null 2>&1
 

 

 

 

No vosso ficheiro index.php (ou onde tiverem o código de jogadores online), adicionem o seguinte no topo do ficheiro (após <?php):

 

include "dump_cache.php";
 

 

 

Para mostrar o resultado, devem ter um echo/print com a variável de uma query.

Basta mudarem o nome dessa variável. Caso queiram mostrar os jogadores nos últimos 5 minutos, o nome da variável é:

 

$online5m
 

 

 

Caso queiram mostrar os jogadores nas últimas 24horas, o nome da variável é:

 

$online1d
 

 

Reiniciar o crontab com o seguinte comando:

 

/etc/rc.d/cron restart
 

 

 

O crontab chamará o ficheiro /cron_online.php a cada 5 minutos.

Executará duas query, na qual obterá os jogadores online (com base no last_play) nos últimos 5 minutos assim como nas últimas 24 horas.

Gravará tudo para o ficheiro dump_cache.php.

Desta maneira, todos os pedidos ao website utilizarão a informação colocada no ficheiro dump_cache.php, poupando bastantes querys.

Link to comment
Share on other sites

  • 6 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...