Der Vorschlag von Suspicion funktioniert an sich schon. Dafür muss man allerdings transaktionssicher vorgehen. D.h. entweder einen monolitischen Server benutzen (1 Prozess (keine Threads) macht die Arbeit des Webservers(hier Apache), der Spieleengine(Nightfire Browsergames Engine) und der Datenbank (MySQL). Sofern man nur einen Prozessor im Server hat ist dies nachweisbar die besten Variante.
Variante 2 ist, dass man die Prozesse/Threads gegenseitig synchroisiert. Diese Variante ist mit heutigen Schedulern ziemliche Zeitverschwendung. Es fängt erst an sich zu lohnen, wenn man wirklich viele Prozessoren zur Verfügung hat und fast nicht synchronisieren muss. Da diese Variante extrem viel Ahnung erfordert um effizient zu werden, kann man diese Variante getrost in den Müll werfen, da fast nie durchsetzbar.
Variante 3 ist, dass man zumind. die Datenbank monolitisch auslegt. Dazu ist es allerdings erforderlich, dass man die Transaktionen immer mit einem "Befehl" komplett abschließt, da sonst wieder selbige Sychroniationsprobleme auftreten wie oben beschrieben.
Ein Befehl(Spieler A will 50 Wakrudpilze an Spieler B geben) sieht dann inetwa so aus(Pseudobefehle

"1. Nehme Spieler A 50 Wakrudpilze ab; 2. Gebe Spieler B 50 Wakrudpilze"
Kann ein Teil davon nicht ausgeführt werden, wird die Transaktion ohne Änderung der Datenbank abgebrochen. Ein Beispiel wäre, wenn Spieler A z.B. keine 50 Wakrudpilze besitzt bzw. Spieler B (aus welchen Gründen auch immer) keine 50 Wakrudpilze aufnehmen kann.
Dieses Beispiel ist extrem vereinfacht (normal müssen deutlich mehr Nebenbedingungen geprüft werden wie z.B. Befinden sich beide am selben Ort, ...)
Achja, Variante 1 ist für die meisten Leute und Server die beste

Gruß damh