Frage

Ich schreibe eine Strategie-Art von Multi-User-Spiel für das Web. Es hat ein Spielfeld (X durch Y Quadrate), dass ich auf serialize und Speicher in einem BLOB in einer MySQL (InnoDB) Datenbank, eine Zeile für jedes laufendes Spiel planen.

Ich versuche jetzt, um herauszufinden, eine gute Möglichkeit, die Datenbank zu halten auf das Spielfeld mit allen Änderungen aktualisiert und zugleich eine günstige Lösung zu finden, wie die Dinge zu behandeln, die auf das Spielfeld in dem Zeitrahmen geschehen zwischen der Lade Seite und macht tatsächlich einen Umzug.
Ich weiß nicht AJAX verwenden.

Es wird höchstens 20 Spieler in jedem Spiel, jeder Spieler, der zwischen 1 und 10 bewegt mich innerhalb von 24 Stunden, so dass es sich um ein „langsames“ Spiel ist.

Mein Plan (bisher) ist auch für das Spielfeld eine Art Prüfsumme zu speichern neben dem Blob und vergleichen Sie die Datenbanken Zustand mit dem Zustand geladen, bevor Sie Änderungen an der Spielfläche zu machen.

Was mache ich mir Sorgen darüber, wie Race Conditions zu verhindern.
Ist es genug:

  1. Begin Transaktion.
  2. load Spielfeld aus der Tabelle
  3. wenn Prüfsumme unterscheidet sich - Rollbacks und aktualisieren die Benutzer anzeigen
  4. wenn Prüfsumme unverändert - Update-Tabelle ein und Änderungen

Ist die BEGIN TRANSACTION genug, um das Rennen zu blockieren, oder muß ich etwas mehr in Schritt tun, 2 zu zeigen, meine Absicht, die Tabelle zu aktualisieren?

Dankbar für alle Ratschläge.

War es hilfreich?

Lösung

Wenn Sie SELECT ... FOR UPDATE , wenn Sie das Spielfeld aus der Datenbank laden, wird es andere wählt blockieren, bis Sie die Transaktion oder zurückzusetzen.

Andere Tipps

Nein. Sie benötigen einen LOCK TABLES Befehl für die Tabellen, die Sie gegen widersprüchliche Updates schützen müssen auszustellen. Dies würde in etwa so aussehen ...

LOCK TABLE my_table WRITE;

Weitere Details finden Sie hier kann ... http: //dev.mysql.com/doc/refman/5.1/en/lock-tables.html

Vergessen Sie nicht, sie danach zu!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top