Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Datenbank für ein kleines Online-Spiel?


FizzKhalifa - Mo 13.07.15 22:44
Titel: Datenbank für ein kleines Online-Spiel?
Ich habe ein kleines Programm geschrieben, mit welchem man Tic Tac Toe spielen kann. Dieses möchte ich nun um eine Mehrspielerfunktion erweitern.
Ich bin mir jedoch nicht sicher wie man so etwas am Besten realisieren kann. Ich hatte vor meinen Raspberry Pi als Server laufen zu lassen und das Spiel dann über eine Datenbank zu steuern.
Es sollen dadurch alle zur Zeit eingeloggten Spieler angezeigt werden können und Spiele gestartet werden können. Die Spiele sollen dann auch vom Server verwaltet werden.

Nur welche Datenbank wäre für so etwas geeignet?
Oder habt ihr noch andere Vorschläge zur Realisierung?

Schon mal vielen Dank für eure Antworten!


Th69 - Di 14.07.15 08:17

Hallo und :welcome:

da würde ich dir eine embedded database [https://de.wikipedia.org/wiki/Eingebettetes_Datenbanksystem], also z.B. SQLite [https://de.wikipedia.org/wiki/SQLite] empfehlen (für C# System.Data.SQLite [https://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki] - unter Downloads [https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki] mußt du dann das für dein System benötigte "Release Package" herunterladen oder noch besser gleich die NuGet-Packages benutzen).

Die größere Aufgabe stellt jedoch die Netzwerkfunktionalität dar, d.h. die Client-Server Kommunikation. Weißt du denn schon, wie du diese umsetzen möchtest?


Ralf Jansen - Di 14.07.15 10:25

Was ist den der Server auf dem RasPi? Windows 10 IoT damit da eine .Net Applikation laufen kann? Ein Mono Umgebung? Was nicht .Net-mäßiges? Abhängig davon könnte sich eine bestimmte Datenbank besser eignen (ganz einfach weil sie dieses Setup explizit unterstützt).


FizzKhalifa - Di 14.07.15 19:08

Also ich wollte das eigentlich, insofern das möglich ist, mit dem Client eine Verbindung über einen ddns Service zu meinem Router aufbauen und entsprechende Ports dann an den Raspberry Pi weiterleiten. Kann man denn solch eine Verbindung mit SQLite aufbauen?

Auf dem Raspberry Pi läuft Raspbian (Debian Variante) und ich habe noch ein virtuelles x86 System drauf, mit dem ich über Mono problemlos .NET laufen lassen kann. Die Frage ist eigentlich nur, was am praktischsten realisierbar wäre, bzw. was am Besten mit C# funktioniert.


Th69 - Mi 15.07.15 09:38

Mir scheint, dir sind die technischen Zusammenhänge noch nicht klar. Eine Datenbank baut keine Verbindung zu einem anderen System auf, sondern dient nur zum Abspeichern von Daten (Informationen).
Die konkrete Architektur für dein System kann ich aus der Ferne schlecht beurteilen. Du brauchst auf jeden Fall ein Programm, welches dauerhaft auf dem Server läuft (egal ob direkt unter Raspbian [falls dieses Mono unterstützt] oder eben in einer virtuellen Maschine). Dieses Programm kommuniziert einerseits dann mit den Clients (mittels TCP/IP) und zum anderen dann mit einer Datenbank (ob diese lokal oder auf einem anderen Server liegt wäre dabei technisch egal). Für den Anfang könntest du auch ohne Datenbank auskommen und die Infos ersteinmal im Speicher oder einer Text- bzw. XML-Datei ablegen.

Für den Anfang lies dir mal die Tutorials aus unserer C#-Library dazu durch:
TcpClient: Asynchrones und Synchrones verbinden [http://www.entwickler-ecke.de/topic_TcpClient+Asynchrones+und+Synchrones+verbinden_108488.html]
TcpListener: Asynchrones und Synchrones verbinden [http://www.entwickler-ecke.de/topic_TcpListener+Asynchrones+und+Synchrones+verbinden_108482.html]
sowie für einfaches XML-Serialisieren Mit XmlSerializer Objekte als XML speichern und laden [http://www.entwickler-ecke.de/topic_Mit+XmlSerializer+Objekte+als+XML+speichern+und+laden_64947.html]


C# - Mi 15.07.15 10:55

Für Networking kann ich dir auch die Lidgren Network Library [https://github.com/lidgren/lidgren-network-gen3] empfehlen. Die nimmt dir doch einiges an Arbeit ab was Verbindungsaufbau und Aufrechterhaltung angeht.