Question

J'écris une stratégie genre de jeu multi-utilisateurs pour le web. Il a une surface de jeu (X par des carrés Y) que je prévois de sérialisation et de la stocker dans un blob dans une base de données MySQL (InnoDB), une ligne pour chaque jeu en cours.

J'essaie maintenant de trouver un bon moyen de garder la base de données mise à jour avec des modifications à la surface de jeu, et en même temps de trouver une solution pratique à la façon de gérer les choses qui se passent à la surface de jeu dans le laps de temps entre le chargement de la la page et de faire en fait un mouvement.
Je ne l'utilise AJAX.

Il y aura au plus 20 joueurs dans chaque jeu, chaque joueur faisant entre 1 et 10 se déplace dans 24 heures, il est donc un jeu « lent ».

Mon plan (jusqu'à présent) est de stocker aussi une sorte de contrôle de la zone de jeu à côté de la blob et comparer l'état des bases de données avec l'état chargé avant d'essayer d'apporter des modifications à la surface de jeu.

Ce que je crains est sur la façon d'éviter les conditions de course.
Est-il suffisant pour:

  1. Début de la transaction.
  2. charge de la table playfield
  3. si checksum diffère - rollback et mettre à jour les utilisateurs visualisent
  4. si la somme de contrôle inchangé - table de mise à jour et valider les modifications

est suffisamment de BEGIN TRANSACTION pour bloquer la course, ou dois-je faire quelque chose de plus à l'étape 2 pour montrer mon intention de mettre à jour le tableau?

Thankful pour tous les conseils.

Était-ce utile?

La solution

Si vous utilisez SELECT ... FOR UPDATE lorsque vous chargez le champ d'action de la base de données, il bloque les autres jusqu'à ce que vous choisit valider ou annuler la transaction.

Autres conseils

Non

. Vous devrez émettre une commande LOCK TABLES pour les tables dont vous avez besoin pour se protéger contre les mises à jour contradictoires. Cela ressemblerait à quelque chose comme ...

LOCK TABLE my_table WRITE;

Plus de détails peuvent être trouvés ici ... http: //dev.mysql.com/doc/refman/5.1/en/lock-tables.html

Ne pas oublier de les ouvrir plus tard!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top