Applet, JavaScript, PHP, mySQL -> Was brauch ich?

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
Hallo,

also ich programmiere jetz ca 1 Jahr regelmässig bisschen Java, habe aber noch nie irgendwelche Projekte
gemacht, die was mit dem Internet zu tun hatten.

Jetzt will ich ein Spiel programmieren, dass Highscores aller User global auf einem Server speichert.
Ich habe Webspace mit ftp Zugang, und der ist auch PHP und mySQL kompatibel.

Das Ding ist, ich weiss jetzt nich was ich überhaupt brauche für diesen Zweck.

Ich könnte zwar einfach eine Highscore.txt datei auf den Server legen, und wenn der User das Programm startet
die einfach per ftp runterladen, auslesen und die Scores anzeigen. Wenn er ein spiel gespielt hat und eine Highscore
gebrochen hat, dann kann ich daraus wieder ne Datei machen und hochladen.

Aber das ist natürlich nicht gut, siehe Race Conditions, wenn mehrere Spieler gleichzeitig hoch und runterladen.

Deshalb brauch ich jetzt doch irgendeine synchronisierte Sache, die aufpasst dass da nix schiefgeht. Ob ich
jetzt ne "Datenbank" brauche (was auch immer das genau heisst), oder das irgendwie per Script machen soll...
keine Ahnung.

Also die Frage nochmal konkret: Ich brauch eig. wirklichj nicht mehr als diese Datei auf dem Server, aber
das Hoch- und Runterladen muss synchronisiert sein, d.h. wenn ein User da grad was macht darf ein anderer
nicht dazwischen funken.

Und das muss ja irgendwie aufm Server liegen, dieses Applet, oder Script, oder whatever... Ich kann sowas ja
nicht vom Programm selbst synchronisieren, weil nur der Server wissen kann, wer da jetz alles verbunden ist, und nicht mein Programm.

Wie soll ich das machen, muss ich da was mit PHP oder mySQL programmieren, oder kann sowas ein Applet,
oder was.. Wie macht man sowas?
 
hdi hat gesagt.:
muss ich da was mit PHP oder mySQL programmieren

Nein, das ist nicht nötig.

Nur der Zugriff auf die Datei muß synchronisiert werden.

Das geht mit PHP oder mit Servlets (JSPs) die dafür sorgen,
daß sie nur einen Dateizugriff gleichzeitig zulassen.

Eventuell ist es auch möglich, die gleichzeitigen Highscore-Änderungen
in einer Queue zu verwalten, sodaß jede Highscore-Änderung
immer auf die aktuellsten Daten angewandt wird (und die anderen
Zugriffe maximal so lange warten müssen, bis eine Highscore-Änderung
ausgeführt wurde)
 
Mir ist gerade gekommen, dass da wohl doch mehr dahinterstekcne muss, als den Zugriff auf die Datei zu synchronisieren...

Bsp:

UserA startet das Programm, die Highscores werden runtergeladen. Er spielt ne Weile und dann hat er eine neue HighScore geschafft, die nun hochgeladen wird. In der zwischenzeit könnte aber UserB das Programm gestartet und wieder neue Highscores hochgeladen haben. Die Datei soll ja nicht die ganze Zeit gesperrt sein, während ein Spieler spielt, dann könnte ja immer nur 1 Spieler gleichzeitig das Spiel spielen.

D.h. ich würde beim Upload der Liste von UserA die Highscores, die von UserB hochgeladen wurden, überschreiben.

Ich könnte beim Upload ja nochmal die Liste runterladen, und prüfen ob es Änderungen gab, und dass dann mergen. Aber dieser Vorgang an sich ist ja wieder gefährlich, denn UserA lädt beim Upload die Liste vom Server nochmal runter, und merged das nun... In dieser Zeit lädt ein anderer User eine neue Liste hoch, UserA hat fertig gemerged, lädt hoch und wir haben das gleiche Problem, dass die Liste überschrieben wurde.

D.h. ich muss nicht nur den Datei-Zugriff synchronisieren, sondern auch eine Lock-Variable setzen können, damit während ein User die Liste runterlädt, mit seiner lokalen Liste merged (Und in diesem Moment gibt es ja keinen Zugriff mehr auf die Datei), und hochlädt, gar kein Zugriff auf die Datei ist. Das Runter- und Hochladen der Datei muss gesperrt sein.

Pseudo-Code:

Code:
downloadList(); 
lockList();
mergeListWithLocalList();
uploadList();
unlockList();

Aber zwischen downloadList() und lockList() darf mir natürlich auch keiner dazwischenfunken... :/

Kann man sowas auch mit Servlets machen? Oder PHP? Bzw ich weiss jetz gar nich so recht wo ich einsteigen soll..
Ich hab nach Servlets gegooglet, aber irgendwie erkenn ich da nich so den Zusammenhang zu Java, oder ich war
auf den falschen Seiten, wo nich wirklich das erklärt wird...

Habt ihr vllt ne gute Einsteiger-Ressource für mich? Irgendein Link, wo von Grund auf gelehrt wird, wie man
so etwas realisieren kann?
 
Gibt auch noch das hier:

http://jpmdbc.dev.java.net

Damit kommst du nehazu ohne Umweg an die MySQL Datenbank "von aussen" ran.

Wäre etwas eleganter als die Sache mit der Datei ;-)
Einzigstes Manko: Die Lib beherrscht nur die Basics. Alles was die Meta-Informationen via JDBC anfordert, funktioniert nicht. Aber für SELECT, INSERT, UPDATE und DELETE tut's die Lib allemal. Prepared Statements gehen auch ..

- Alex
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben