Portal SAMP
[Ajuda] Isso pode causar lentidão no servidor? - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Isso pode causar lentidão no servidor? (/showthread.php?tid=2959)



Isso pode causar lentidão no servidor? - Naruto - 03/11/2022

Código PHP:
public OnPlayerUpdate(playerid)
{
    
SalvarConta(playerid);
    return 
1;


Salvar conta no OnPlayerUpdate!


RE: Isso pode causar lentidão no servidor? - CoelhaO_LokaO - 03/11/2022

Sim, fica muito lento pois é feito em segundos, quando a gm e pequena não da para perceber porem conforme for ficando mais pesada da uma grande lentidão.

O correto e quando Desliga o Servidor ou quando Player sai do Servidor.


RE: Isso pode causar lentidão no servidor? - xbruno1000x - 03/11/2022

De forma empírica, podemos inferir que isso seria muito prejudicial. Em 1 segundo, a conta seria salva umas 5/6 vezes por jogador. Agora imagine que seu servidor tenha 100 jogadores simultaneamente... seriam 500 a 600 salvamentos por segundo. 30000 a 36000 salvamentos por minuto!!


RE: Isso pode causar lentidão no servidor? - Naruto - 03/11/2022

Mais em OnGameModeExit as contas não são salvas Blush


Código:
public OnGameModeExit()
{
    foreach(new i: Player)
    {
        SalvarConta(i);
    }
    DOF2_Exit();
    return 1;
}



RE: Isso pode causar lentidão no servidor? - João Pedro Alves - 03/11/2022

Faz um timer pra salvar a cada 30 segundos ué


RE: Isso pode causar lentidão no servidor? - SrBlue - 03/11/2022

o correto seria utilizar quando o player desloga, quando ocorre no OnGameModeExit, salva somente se a gamemode desligar, seja em gmx...
recomendo utilizar a callback: OnPlayerDisconnect(playerid, reason)
  - logo se o player deslogar, o mesmo pode ser salvo..


RE: Isso pode causar lentidão no servidor? - João Pedro Alves - 03/11/2022

(03/11/2022 16:14)SrBlue Escreveu: o correto seria utilizar quando o player desloga, quando ocorre no OnGameModeExit, salva somente se a gamemode desligar, seja em gmx...
recomendo utilizar a callback: OnPlayerDisconnect(playerid, reason)
  - logo se o player deslogar, o mesmo pode ser salvo..

Só isso não é seguro para grande escala... Pra ter 99% chance de não dar problema o ideal é juntar essas técnicas com um timer de x em x segundos salvando também.


RE: Isso pode causar lentidão no servidor? - Carlos Victor - 04/11/2022

SIM! MUITO PREJUDICIAL. Eu digo isso por que eu já fiz essa merda em 2019 em um servidor que eu tinha, eu ligava o servidor e não dava 30s com ele ligado e alguém conectado que o servidor começava a lagar de forma BRUTA. Eu acabei fechando o servidor por falta de conhecimento na época, e toda vez que eu lembro disso eu começo a rir por causa da minha burrice, mas enfim... Acontece.

A melhor forma de evitar com que aconteça um wipe, o servidor crash e prejudique os dados do jogador é de fato criar um timer como o @N0n disse. E sempre salvar os dados quando o jogador desconecta(obviamente).

Código:
/*
    A cada 30 segundos a conta de todos os jogadores conectados serão salvas.

    Você pode optar por tempos maiores, como 1 minuto, 2 minutos caso perceba lag em seu servidor.

    Obviamente se tiver MIL jogadores no seu servidor, isso será prejudicial...
    Em um servidor de 50-150 jogadores eu acho que é de boa.
*/
public OnGameModeInit()
{
    SetTimer("OnSaveAllPlayers", 1000 * 30, true);
    return 1;
}

forward OnSaveAllPlayers();
public OnSaveAllPlayers()
{
    foreach(new i : Player)
    {
        SalvarConta(i);
    }
    return 1;
}