Letztes Mal sind ja beim Beatpick einige Dinge schief gegangen, daher wollte ich nur ein wenig dazu schreiben, vllt. kann man das Problem ja lösen.
Meine Vermutung: Beim Absenden des Beatpickers wird in der Datenbank oder sonst wo abgefragt, ob der Beat für das Battle mit der ID x schon gewählt wurde, wenn nicht, dann setze ihn. Ich vermute, dass es hier zu Synchronisationsproblemen gekommen ist.
Beispiel zur Veranschaulichung:
Rapper X wählt Beat aus.
Rapper Y wählt Beat aus.
Rapper X schickt Beat ab.
Es wird geprüft, ob im Battle zwischen Rapper X und Rapper Y schon der Beat gepickt wurde.
Antwort: Nein
Setze Beat für Battle auf ... Unterbrechung, anderer Prozess kommt dran.
Rapper Y schickt Beat ab.
Es wird geprüft, ob im Battle zwischen Rapper X und Rapper Y schon der Beat gepickt wurde.
Antwort: Nein
Unterbrechung, anderer Prozess kommt dran.
... auf Beat von Rapper X.
Gib Rapper X die Nachricht zurück, dass er den Beatpick gewonnen hat.
Prozess beendet, anderer Prozess kommt dran.
Setze Beat für Battle auf Beat von Rapper Y.
Gib Rapper Y die Nachricht zurück, dass er den Beatpick gewonnen hat.
-> Verwirrung + Beat von Rapper X wird mit Beat von Rapper Y überschrieben.
Wenn es um normale Software geht, die in Java, C++ o. ä. geschrieben wird, kann man meistens diese kritische Bereiche abriegeln, sodass dieser Bereich vollständig abgeschlossen wird und es dazwischen zu keinem Kontextwechsel (Wechsel zwischen den Prozessen) kommen kann. Wie das bei einem Webserver wie nginx oder Apache geregelt werden kann, weiß ich selber nicht (da sich der Server um die Prozesse kümmert und nicht das eigen-geschriebene Script). Ich würde vorschlagen zur Sicherheit beide Uploads / BeatIds zu speichern und im Nachhinein zu checken welcher Beat der ältere ist und diesen dann zu nehmen und erst dann die Rapper darüber zu informieren, wer den Beatpick gewonnen hat (diese Zeit zu warten sollte nur ein paar Minuten und daher okay sein). Vllt. kann man auch irgendwie speichern, wann der Request abgesetzt wurde (Upload dauert ggf. länger) um daran zu bestimmen, wer vor dem anderen da war.
Wie gesagt, nur Ideen und Vorschläge, kann selbst nur vermuten wie die PHP-Scripte geschrieben sind aber ich würde stark vermuten, dass es so implementiert ist weil ich es genau so gemacht hätte.