Spieldaten aus Datenbank wie übertragen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Stefen

Betreff: Spieldaten aus Datenbank wie übertragen

BeitragMo, März 10, 2008 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,

ich möchte zu einem fertigen Onlinespiel eine kleine separate Lobby (Spielstatus Übersicht) schreiben, wo Spielstand und beteiligte Spieler zu sehen sind.
Die aktualisierten Spielerdaten werden von dem Programm (Spielserver) in eine MySQL Datenbank geschrieben, nun möchte ich diese Daten an die jeweiligen Online Spieler in die oben schon benannte Lobby übertragen.
Diese Daten werden einmal pro Sekunde in der Datenbank aktualisiert und sollen daher auch so an den Spielclient bzw. extra Lobby übertragen werden.

Nun Frage ich mich, wie ich das am besten umsetzen soll ?

Über BB mit direkten Datenbankzugriff, wäre wohl am besten, allerdings der Nachteil das die DB Daten im Programm stehen.
Mit BB und Umweg über PHP, wäre sehr sicher, allerdings wie sieht es mit der Geschwindigkeit aus bei mehreren Spielern und der parserei der Dateien ?
Direkt über TCP ohne PHP wäre nicht schlecht, könnte man einen kleinen Server erstellen der direkt die Daten aus der DB líest und an die Lobby überträgt.
Rootrechte und ausführbare Dateien auf dem Server sind möglich.

Ist sowas umzusetzen, bzw. gibt es hier vielleicht schon ähnliche Ansätze.

Eventuell gibt es noch andere Lösungen.

Danke für eure Tips.
 

Dreamora

BeitragMo, März 10, 2008 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
BB + PHP gibt kaum Parserei, denn du wirst vom PHP kaum Dinge erfragen die du nicht brauchst. Die Frage ist jedoch was die Lobby können soll. Denn wenn man auch chatten können soll endet es vermutlich wieder mit nem eigenständigen Server oder mindestens Metaserver in CGI oder so, etwas was in Echtzeit auf dem Webhost laufen kann.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Stefen

BeitragMo, März 10, 2008 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Chat wird nicht benötigt, da er im Spielclient schon vorhanden ist.
Leider muss ich das extern mit einem separaten Window umsetzen, da man es nicht mehr im Spielclient integrieren kann.
Übertragen sollen nur die Spieldaten werden, allerdings an ein einige hundert Online Spieler.

Das sind etwa 20 verschiedene Spielparameter(Spielername, SpielID, Spieltisch, usw.) die aus der DB übertragen werden sollen.
 

Dreamora

BeitragMo, März 10, 2008 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
vom Server wird nichts übertragen. Weder eine DB noch PHP senden etwas.
Der Client also der User requested die Informationen, insofern läuft das da ein wenig anders.

Aber mit mehreren hundert Spielern kannst du das "mehrmals pro Sekunde" eigentlich bei egal welchem Ansatz vergessen, speziell wenn du keinen dedicated server hast, denn das wird recht intensiv für den Server.
Gibt es einen Grund das alle alles erhalten sollten? Nehme mal an nur ein kleiner teil der daten müssen jeweils aktualisiert werden. Auch würde es mich sehr wundern wenn du sie so häufig aktualisieren müsstest. Das klingt extrem nach overkill ansatz, denn selbst ein Chatsystem via PHP - MySQL würde nicht derart viel senden nach wieviel es bei dir klingt ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Stefen

BeitragMo, März 10, 2008 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Server sind vorhanden, sagte ich schon..
Sogar 3 Stück, einer für die Spielabwicklung, einer für die Datenbank, der dritte läuft als reiner Spiegelserver.

Es sind reine Spieldaten die übertragen werden sollen, ich möchte eine kleine Übersicht schreiben, damit die anderen Spieler eine Übersicht über die anderen Spieltische erhalten.

Es kann auch alle 2 Sekunden aktualisiert werden, aber es laufen ewig Daten der anderen Tische auf, diese sollen relativ Zeitnah und aktuell als Statistik für die anderen übertragen werden.

EDIT:
Hatte ich noch vergessen, alle Spieler erhalten die gleichen Daten, es muss also nicht für jeden einzelnen Spieler die DB abgefragt oder die Daten aufbereitet werden.

Sowas sollte man doch lösen können, nur bin ich mir mit dem Übertragungsweg zur Spiellobby mir nicht sicher.
  • Zuletzt bearbeitet von Stefen am Mo, März 10, 2008 19:29, insgesamt einmal bearbeitet
 

Dreamora

BeitragMo, März 10, 2008 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach so, dann sollte es eigentlich zu machen sein, immer vorausgesetzt das ganze hängt hinter einer richtigen Leitung, keiner Heimleitung.
Am einfachsten:
1. Überlegen wie die Tische unterteilt sein sollen. Niemand kan 1000 Tischen anschauen, sprich im normalfall wird man 1-9 Tische reinaktualisiert bekommen (1000 Tische wären auch bandbreitenmässig nicht machbar ausser du setzt 10mbit als voraussetzung an)

2. Zentralen "Spielserver" der die Daten an die Spieler rausgibt. Dieser Server nimmt die Daten entgegen und trägt sie in die Datenbank ein. Nebenher hält er aber für jeden Tisch den aktuellen Zustand und (je nachdem um was es sich handelt) eine Liste von Zügen seit Zeitpunkt X wobei du bei den Zügen auch den Zeitpunkt der Aktion speichern musst, damit du für jeden Spieler nur die Züge versendest die er wirklich noch braucht.

3. Nur die Daten senden die der Spieler wirklich noch braucht -> Züge und Endzustand des Brettes. Diese Daten kommen wie in 2 beschrieben aus eigenen Daten des Servers und nicht aus der Datenbank.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Stefen

BeitragMo, März 10, 2008 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit den Anbindungen und den Servern mache ich mir keine Probleme, ganz im Gegenteil es sind Hochleistungsserver und auch die Anbindung.
Das System ist so bis zu 5000 Spiel Slots ausgelegt, max. 500 laufen zur Zeit erst.

Alle Spieler erhalten die gleichen Daten, es muss also nicht für jeden einzelnen Spieler die DB abgefragt oder die Daten aufbereitet werden.

-Welche Spieler sind noch Online, wie lange, was für ein Guthaben jeder noch hat.
-Welche Spieler sitzen an welchem Tisch und mit wem.
-Wer hat das meiste erspielt und wer das wenigste.


Sowas in der Art, aber wie schon gesagt, alle erhalten die gleichen Daten.
Nur nach jeder Spielrunde die manchmal nur 5 Sekunden pro Tisch dauert, sieht die Statistik für den Tisch und die Spieler dann anders aus.

Daher sollte das Zeitnah an andere übertragen werden.

Mit dem Umweg über PHP finde ich nicht sehr schön, es sollte doch möglich sein die Daten dort ohne Umweg rauszuholen, aufzubeiten und an mehrere per TCP zu senden.

Ich hatte sowas schon als Ansatz in Delphi, leider ist wohl der Source nicht mehr vorhanden.
 

Dreamora

BeitragMo, März 10, 2008 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Dennoch sieht der Spieler keine 500 Tische, es macht also auch keinen Sinn die Daten von 500 Tischen zu übertragen. Es reicht wenn der Spieler dem Server mitteilt welche Tische er beobachtet und dann nur die an den jeweiligen Spieler versandt werden.
Das reduziert das Datenaufkommen und vor allem die benötigte Zeit für den Datenversandt erheblich.

Was spricht denn genau gegen den Aufbau den ich oben vorgeschlagen habe?

Da ja zu jeder Zeit bekannt ist welche Tische der Spieler beobachtet, kann man die relativ einfach als "einzige" aktualisieren.
Wenn der Spieler den Tisch zb wechselt kommt das zum Tragen was ich oben in 2 & 3 vorgeschlagen habe. Zustand und Veränderungen / Züge
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Stefen

BeitragMo, März 10, 2008 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht habe ich mich auch blöd ausgedrückt, es müssen die Daten aller Tische zu sehen sein.
Es ist leider sehr dumm in dem Spiel realisiert, ich möchte diese Statistik auch schon für jeden neuen Spieler zur Verfügung stellen der sich schon eingeloggt hat aber noch an keinen Tisch spielt.

Anhand dieser Daten soll der neue Spieler sehen und sich entscheiden an welchem Tisch es sich lohnt zu spielen.

Ich kann das mal mal als Beispiel vom Online Poker nennen, es soll solche Art von Übersichts Lobby der Spieltische werden.

Wenn es auch nichts mit Poker zutun hat, ich kann leider das Spiel bzw. das System nicht nennen, weil wir noch in der Testphase sind.
 

Dreamora

BeitragMo, März 10, 2008 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder ich habe mich nicht klar ausgedrückt: Sicher muss der Spieler zugriff auf alle Daten haben, aber da er nicht alle Daten sehen kann zur gleichen Zeit, macht es keinerlei Sinn all diese Daten immer upzudaten. Das wäre wie wenn du in einem MMORPG alle Figuren, Objekte etc in einer Zone immer an alle Spieler schicken würdest. Weder macht das einen Sinn noch ist es praktikabel.

ähnlich verhält es sich hier. Der Spieler ist nicht gott, er kann nicht 500 Tische zur genau gleichen Zeit sehen. Warum sollten also die Daten aller 500 Tische immer aktualisiert werden?

Es gibt Tische die der Spieler jetzt sieht, die müssen sicher aktualisiert werden. Damit keine Latency entsteht kannst du auch die Tische "aussen rum" (in der Liste jeweils ein paar drüber und drunter) noch aktuel halten.
Aber bei den anderen macht es keinerlei sinn. Da reicht es wenn der Spieler die Daten bekommt, das der Tisch existiert und die namen der spieler (sofern das vorgesehen ist angezeigt zu werden) bzw. die anzahl spieler am tisch. Der rest kann dann an den Spieler gesandt werden, wenn er die Daten potentiell auch zu Gesicht bekommt, sprich wenn er die Daten auch wirklich benötigt.

weil sonst wirds mit mehreren tausend Spielern nimmer funktionieren egal wie du es machst. Denn du hast (n+m)^2 Abgleiche mit deiner Methode, wobei n die Spieler und m die Tische sind ...

1000 Spieler 100 Tische -> 1'000'000 Spieler Daten zu versenden, alle X sekunden. sowie 10'000 Tische.

Ich denke du siehst das Problem und warum es sich lohnt sich zu überlegen, was man wirklich senden muss bzw. was wann abzugleichen / zu aktualisieren ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Stefen

BeitragMo, März 10, 2008 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit der Aktualisierung der Daten nur im Sichtbereich ist eine Idee, ich muss sehen wie man das umsetzen könnte.
Danke für Deine Ausführung, ich werde mir das nochmal durch den Kopf gehen lassen.

Vielleicht hast Du ja Lust Dir die Sache mal verschwiegen über einen Spielclient anzusehen, eventuell sieht man die Sache noch von einer anderen Seite.
Zur Zeit läuft nur virtuelles Spielgeld als Testbetrieb, es sind aber schon zahlreiche Leute den ganzen Tag auf der Plattform.

Ich gehe jetzt erstmal Offline und melde mich nochmal..

DAK

BeitragDi, März 11, 2008 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
zu einem ähnlichen problem eine frage: kann man mit bb einen direktzugriff auf eine mysql-datenbank machen? wenn ja, wie?
Gewinner der 6. und der 68. BlitzCodeCompo
 

Rainer-M.

BeitragDi, März 11, 2008 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
DAK hat Folgendes geschrieben:
zu einem ähnlichen problem eine frage: kann man mit bb einen direktzugriff auf eine mysql-datenbank machen? wenn ja, wie?


hatte heute aucvh schon diese Frage gestellt, leider konnte mir noch niemand eine direkte Antwort drauf geben.

https://www.blitzforum.de/foru...p?p=288175
 

Dreamora

BeitragDi, März 11, 2008 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du dir ne libmysql.dll wrapperlibrary schreibst geht das.
Aber das wär in dem fall keine Lösung, denn Remote Zugriff auf MySQL ist wie die Türe zu Hause vorsätzlich offen stehen lassen. Der User der das tut kann nicht mal mehr als blöd bezeichnet werden, da kannst du dir die gesamte Datenbank bzw. alle einfach so droppen, das geht schneller.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

CypressArt

BeitragDi, März 11, 2008 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
DAK hat Folgendes geschrieben:
zu einem ähnlichen problem eine frage: kann man mit bb einen direktzugriff auf eine mysql-datenbank machen? wenn ja, wie?


suche im Forum nach:

Onlinehighscores mit PHP, MySQL und Blitzbasic von Ofenrohr

ist nicht direkt in die mysql DB sondern via PHP...
(no comment) -> Google Search Bot!!
 

Rainer-M.

BeitragDi, März 11, 2008 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man denn nich einfach mit BB die Datenbank öffnen und eine Abfrage machen und die dann ausgeben, soll nur Local sein ?
Soll ohne PHP sein nur die Verbindung, Abfrage und Ausgabe.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group