Jump to content

[metin2] número de jogadores em reinos


tierrilopes
 Share

Recommended Posts

Contador para números de jogadores em cada reino.

Citando outro post:

 

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 5 minutos por exemplo, independentemente do número de acesso na página.

 

 

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

 

<?php
/*Tierri Lopes
AbyssMt2 CMS
https://tlthings.net*/
//Localização do ficheiro de dump
$dumpFile = "/usr/local/www/apache24/data/dump_reinos.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 do reino shinsoo
$sql = mysqli_query($con, "SELECT COUNT(*) FROM player_index WHERE empire = 1");
$shinsoo = mysqli_fetch_array($sql);
//Jogadores do reino chunjo
$sql2 = mysqli_query($con, "SELECT COUNT(*) FROM player_index WHERE empire = 2");
$chunjo = mysqli_fetch_array($sql2);
//Jogadores do reino jinno
$sql3 = mysqli_query($con, "SELECT COUNT(*) FROM player_index WHERE empire = 3");
$jinno = mysqli_fetch_array($sql3);

//Escrever conteúdo do ficheiro dump_reinos
$file = fopen($dumpFile, "w");
fwrite($file, "<?php\n\n");
fwrite($file, " /* Gerado pelo cron */\n\n");
fwrite($file, " \$jogadores_shinsoo = \"{$shinsoo[0]}\";\n");
fwrite($file, " \$jogadores_chunjo = \"{$chunjo[0]}\";\n");
fwrite($file, " \$jogadores_jinno = \"{$jinno[0]}\";\n");
fwrite($file, "\n\n?>");
fclose($file);
//Limpar resultado da query de jogadores do reino shinsoo
mysqli_free_result($sql);
//Limpar resultado da query de jogadores do reino chunjo
mysqli_free_result($sql2);
//Limpar resultado da query de jogadores do reino jinno
mysqli_free_result($sql3);
//Fechar ligação
mysqli_close($con);?>
 

 

 

 

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

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

Criar um ficheiro vazio chamado dump_reinos.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 em reinos*/5 * * * * php /cron_reinos.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_reinos.php";
 

 

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

Basta mudarem/adicionarem o nome dessas variáveis.

 

Caso queiram mostrar os jogadores do reino shinsoo o nome da variável é:

 

$jogadores_shinsoo
 

 

Caso queiram mostrar os jogadores do reino chunjo o nome da variável é:

 

$jogadores_chunjo
 

 

Caso queiram mostrar os jogadores do reino jinno o nome da variável é:

 

$jogadores_jinno
 

 

Reiniciar o crontab com o seguinte comando:

 

/etc/rc.d/cron restart
 

 

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

Executará três query, na qual obterá os jogadores do reino shinsoo, chunjo e jinno.

Gravará tudo para o ficheiro dump_reinos.php.

Desta maneira, todos os pedidos ao website utilizarão a informação colocada no ficheiro dump_reinos.php, poupando bastantes querys. (três por carregamento de página)

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
 Share

×
×
  • Create New...