J'ai un jeu de cartes multijoueur (jusqu'à 4 joueurs peuvent jouer la même instance du jeu) sur facebook. Le jeu est petit et est hébergé sur un seul serveur. Je m'intéresse maintenant à l'évolutivité, car j'espère que bientôt un serveur ne suffira pas.Azure: conseils pour rendre un jeu de cartes multijoueur simple et évolutif
Le serveur stocke en mémoire une liste de tous les jeux qui sont en cours: List<Game>
Lorsqu'un client fait une demande (par exemple lance une carte), il affiche un message au serveur. Maintenant, voici la partie délicate. Le serveur n'envoie pas la réponse immédiatement mais vérifie plutôt si un autre joueur a modifié l'état du jeu avant de répondre. Cette approche fonctionne très bien car le client (silverlight) n'interroge pas constamment le serveur.
Quelle approche recommanderiez-vous de prendre dans Azure? Ma principale priorité est d'obtenir une réponse rapide aux clients et d'éviter les interrogations constantes du client.
Avec ma connaissance Azure limitée Je pense à prendre cette route:
Conserver les jeux dans le stockage de table d'azur au lieu de la mémoire.
Cela se fera dans le WebRole: pseudocode:
void Page_LoadOfAnAspxPage
{
// deserialze the message from the posted information
Message msgClient = ...;
// retrieve game from table storage
Game g = RetrieveFromTableStorage(gameGuid);
// post message to game
g.ProcessClientMessage(msgClient);
// save back to table storage so other game clients can be aware of new state
SaveToTableStorage(gameGuid, g);
// now wait until another client modifies the game
while(true) // will I be incurring hosting charges (transactions for what is going on in this while loop)???
{
// grab game from table storage
g = RetrieveFromTableStorage(gameGuid);
// has something changed?
MsgResponse response = g.ProcessClientMessage(msgClient);
if (response.ActionName != ActionName.GameHasNotChanged)
{
// some other client changed the game.
// give this response back to our client
break;
}
// sleep a little and check again...
Sleep(xx);
}
}
Ne croyez-vous cette approche fonctionnera? Est-ce que je pourrais rencontrer des obstacles? Je serais vraiment reconnaissant pour toutes suggestions/améliorations.
Merci!
santiago