11-05-2012, 03:18 PM
(Modification du message : 11-05-2012, 03:19 PM par Sephi-Chan.)
L'avantage d'un dédié, c'est que tu peux y installer un système de queueing qui te permet de faire des choses en asynchrone (en dehors d'une requête HTTP).
Ça te permet de fonctionner avec des tâches de fond. Par exemple avec PHP Resque et PHP Resque scheduler. Ça donnerait :
Et comme ça, les choses sont faites dans les temps sans demander plein de requêtes SQL supplémentaires tout le temps.
Ça te permet de fonctionner avec des tâches de fond. Par exemple avec PHP Resque et PHP Resque scheduler. Ça donnerait :
// On récupère la durée de production pour ce type d'unité.
$duration = $unit_type->getProductionDuration();
// On calcule l'heure à laquelle la production sera terminée.
$finishAt = strtotime("+{$duration} seconds");
// On collecte quelques données pour les transmettre à la tâche.
$args = array(
'player_id' => $player->getId(),
'unit_type_id' => $unit_type->getId()
);
// On met la tâche en queue. A l'heure demandée, le système va appeler
// la méthode perform de la classe CreateUnit en lui passant le hash $args
// en arguments. Comme ça tu pourras faire le nécessaire, en l'occurrence
// ajouter une unité du type souhaité au joueur indiqué. La tâche est traitée
// par le worker qui s'occupe des tâches de type 'create_unit'.
ResqueScheduler::enqueueIn($finishAt, 'create_units', 'CreateUnit', $args);
Et comme ça, les choses sont faites dans les temps sans demander plein de requêtes SQL supplémentaires tout le temps.