1 vs 1 Duell programmieren - Konzept - Meinungen?

N

Nono

Neues Mitglied
1
Hallo zusammen,

ich möchte eine Art 1 vs 1 Duell programmieren, vom Prinzip her wie Quizduell. Ich habe eine Idee wie ich es machen könnte, aber ich würde gerne Meinungen und evtl Verbesserungsvorschläge dazu hören.

Also erstmal soll es eine externe Datenbank mit einer Tabelle für die Spiele geben. Mögliche Felder sollen zum Beispiel sein: ID, Spieler1, Spieler2, Kategorie1, ...
Also mal angenommen man will ein Spiel mit einem zufälligen Gegner starten, dann klickt man dazu auf den dafür vorgesehenen Button. Wenn der Button geklickt wurde, soll mit AsyncTask ein PHP Script aufgerufen werden. In diesem Script wird überprüft ob es bereits eine Zeile in der Spiele Tabelle gibt, in der Spieler1 schon belegt ist und Spieler2 noch frei ist. Falls ja wird der Spieler bei Spieler2 eingetragen und das PHP Script gibt die ID des Spiels sowie die Information, dass das Spiel bereit ist, zurück. Falls nein wird eine neue Zeile erstellt und der Spieler kommt in das Feld für Spieler1. Dann gibt das Script nur die ID des Spiels zurück. Dann wird in einer weiteren Methode wieder ein PHP Script aufgerufen, an das die ID übergeben wird. Dieses Script überprüft ob ein weiterer Spieler dem Spiel beigetreten ist. Das wird solange zum Beispiel alle 5 Sekunden gemacht, bis das Script die Info zurück gibt, dass das Spiel starten kann. Dann kann der erste Spieler Anfangen eine Kategorie zu wählen und so weiter.

Ich habe dabei jetzt allerdings noch Bedenken. Da bei diesem Konzept häufig eine externe Website aufgerufen wird, geht das bestimmt schnell auf das Datenvolumen, falls man nicht mit dem Wlan verbunden ist, oder? Außerdem bräuchte man dann ja auch einen stabilen Server für die Website, falls viele Leute gleichzeitig ein Spiel starten wollen und somit viele Datenbank Aufrufe gleichzeitig gemacht werden müssen. Ich kenne mich damit zwar noch nicht wirklich aus, da es meine erste App ist an der ich arbeite, allerdings könnte ich mir das so vorstellen.

Jetzt würde ich mal gerne eure Meinungen dazu hören und ob es evtl andere, bessere Möglichkeiten gibt, mein Vorhaben umzusetzen.

Viele Grüße :thumbsup:
 
Ich arbeite auch an einem Konzept und finde diese Frage interessant
ich hatte mir da so vorgestellt :
Ein Client will ein Spiel spielen falls es keinen in der warte Schlange gibt wird dieser Client zur Warteschlange hinzugefügt
kommt ein anderer daher wird einfach der aus der Warteschlange ausgewählt und das Spiel kann losgehen
diese queue sollte natürlich threadsicher sein
wenn sich ein paar gefunden hat wird ein Spiel gestartet (workerthread mit den IDs der Spieler und weiteren variablen)
Du brauchst die spiele eigentlich nicht in der Datenbank speichern sondern ein thread kümmert sich um den Ablauf dieser läuft einfach solange ein Spiel eben dauert...mmmh wie das aussieht wenn man tausende von threads mit vielen Daten laufen hat?outofmemory müsste man auf jeden Fall vorbeugen vllt durch größere rams oder halt wirklich dann eine Speicherung auf der Festplatte in Files oder DBs

Der ursprüngliche Beitrag von 03:18 Uhr wurde um 03:21 Uhr ergänzt:

Zu den vielen Leuten die auf einmal auf die Datenbank zugreifen:kein Problem du wirst das wahrscheinlich einen taskqueue implementieren der nacheinander die eingegangenen anfragen abfwrtigt
 
Ok aber wie genau stellst du dir das mit der Warteschlange vor? Auf die Warteschlange müsste dann ja jeder Client zugreifen können. Wie macht man sowas denn?
 
Guck dir Task queue in Java an oder allgemein queues die Clients haben nur das recht sich anzustellen der Server arbeitet einfach die Schlange von vorne ab... das ist eigentlich ganz grundlegende Netzwerk Programmierung dass ein Server eine task queue für server anfragen hat und für jeden Client einen thread startet
 
Ok, kennst du zufällig ein deutsches Tutorial für diese Task Queues? Hab noch nichts gefunden und da es auf dem ersten Blick ziemlich kompliziert aussieht weiß ich nicht ob ich es mit einem englischen Tutorial hinbekomme.
 
also da musst du GANZ SICHER was finden können das ist ein grundlegendes programmierparadigma und kein fancy stuff

zum beispiel heir ein video tut für die allgemeine funktionsweise von queues : https://www.youtube.com/watch?v=hBHQqZxDb9g

und niucht vergessen: alles schön synchronisieren damit nichts schieff läuft

guck dir diese sachen an und entscheide dann selber wie du das umsetzt

lg
 
Jaiel schrieb:
zum beispiel heir ein video tut für die allgemeine funktionsweise von queues : https://www.youtube.com/watch?v=hBHQqZxDb9g

Ja zu normalen Queues finde ich genug, aber es geht ja hier um Task Queues. Eine normale Queue wie sie in dem Video erklärt wird existiert ja immer nur beim Anwender. Aber wenn man eine Warteschlange für alle Clients, die ein Spiel starten wollen, haben will, braucht man ja was anderes als eine normale Queue oder?

markus.tullius schrieb:
Das sollte alles auf dem Server ablaufen, die sind für genau so etwas ausgelegt.
In PHP habe ich noch nicht viel programmiert, vielleicht hilft dir das weiter:

https://cloud.google.com/appengine/docs/php/taskqueue/
Background jobs with php and resque: part 1, introduction | kamisama.me

Der zweite Link war erstmal ganz gut für das Verständnis, allerdings ist das Tutorial nur für Linux Nutzer und ich benutze Windows. Ich gucke mir dann den ersten Link mal genauer an. Hatte mir das von google schon für Java angeguckt, aber nicht viel davon verstanden. Aber du hast recht, das sollte ja dann auf dem Server laufen und somit kann es auch in PHP sein und damit kenne ich mich besser aus. Also ich gucke es mir mal an.
 
Hi, das mit Java auf dem Server würde ich erst mal lassen. :)

Ob du wirklich ein TaskQueue brauchst, bezweifle ich fast. Bei der Anzahl der QuizApp im AppStore wirst du erst mal nicht so viel Traffic auf dem Server haben. Wenn überhaupt.

Die übermittelte Datenmenge würde ich beschränken. Z.B. ID der Runde, Id der Frage, Antworten, id des User.

Der Rest ist einfaches SQL. Vielleicht den Server noch Transaktionssicher machen. Aber das dürfte reichen. Die Server sind heutzutage sehr schnell.

Ein TaskQueue für die Internetkommunikation ist was schönes, aber man sollte schon etwas Zeit mit bringen, wenn man es implementiert.
 

Ähnliche Themen

R
  • Gesperrt
  • roland-senior
Antworten
3
Aufrufe
921
swa00
swa00
R
Antworten
9
Aufrufe
737
koje71
koje71
Zurück
Oben Unten