Les langages Optimisation FiveM Côté serveur : réagir plutôt que surveiller
Sauvegarder moins, sauvegarder mieux
Le serveur, lui, sert tous les joueurs à la fois. Une boucle serveur qui travaille pour chaque joueur, chaque seconde, se multiplie par le nombre de joueurs connectés.
La sauvegarde à l'aveugle
CreateThread(function()
while true do
Wait(1000)
for _, id in ipairs(GetPlayers()) do
MySQL.update.await('UPDATE comptes SET argent = ? WHERE id = ?', { ... })
end
end
end)
Avec 64 joueurs : 64 requêtes par seconde, même quand rien n'a changé. C'est la base de données qui sature la première, et avec elle tout ce qui l'attend : connexions, inventaires, achats.
Trois idées qui changent tout
- Marquer ce qui a changé. Une table
modifie[id] = true, remplie quand l'argent bouge. On ne sauvegarde que ces joueurs-là. - Grouper. Une sauvegarde par minute plutôt qu'à chaque gain : dix gains en une minute, une seule requête.
- Réagir aux événements. À la déconnexion, FXServer déclenche l'événement
playerDropped, avecsourcequi désigne le joueur qui part. C'est le moment de sauvegarder ce qui ne l'a pas encore été :
AddEventHandler('playerDropped', function(raison)
local src = source
-- sauvegarder src s'il a des modifications en attente
end)
playerDropped est un événement du serveur lui-même : AddEventHandler
suffit, pas besoin de RegisterNetEvent -- ce qui évite en prime qu'un client
puisse le déclencher.
Le principe dépasse FiveM : on ne demande pas « est-ce que quelque chose a changé ? » toutes les secondes, on réagit quand quelque chose change.
1 exercice pour cette lecon
Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte
-
Sauvegarder moins, sauvegarder mieux difficile lecon a valider