2016-07-15 4 views
0

Ich arbeite derzeit an einem Multiplayer-Spiel, das zwei Datenbanken (MONGODB) verwenden wird. Eine für die Authentifizierung (Login) und eine für alle spielspezifischen Daten. Was ich getan habe ist, die benutzer- und spielspezifischen Daten zu trennen. Auf diese Weise kann ich in Zukunft Micro-Services um den Benutzer herum aufbauen.Mehrere Datenbank-Management

Ich bin ein wenig unsicher, wie die spielspezifischen Datenbankoperationen tho gehandhabt/validiert werden. Wenn ich mich bei meinem Spiel anmelde, führe ich eine POST-Anfrage an meine Rest-API aus, die den Benutzer validiert und einige Daten zurückgibt.

Das Spiel selbst verwendet jedoch eine TCP-Socket-Verbindung, um Echtzeit-Gameplay zu verarbeiten und speichert spielspezifische Daten in der Datenbank auf dem autoritativen Server (alle Spiellogik erfolgt auf dem Server). Wie würden Sie die Daten der spielespezifischen Datenbank mit einem bestimmten Benutzer in der Authentifizierungsdatenbank verknüpfen?

+0

Benutzer haben IDs, nicht wahr? Speichern Sie die Benutzer-ID. –

+0

Ich kann nicht auf die ID zugreifen, die in der Authentifizierungsdatenbank von der spielspezifischen Datenbank gefunden wird, es sei denn, ich sende es über den Client, was bedeutet, dass der Client in der Lage wäre, die ID zu manipulieren oder irre ich mich? – JSjuniorlad

+0

Speichern Sie es in einem manipulationssicheren Format. Wie verschlüsselte Cookies in Browsern. Ihr Authentifizierungsserver erzeugt Authentifizierungsdaten, verschlüsselt sie mit dem öffentlichen Schlüssel des Spielservers und kehrt zum Client zurück. Der Client sendet diesen undurchsichtigen Wert mit jeder Anfrage. Der Spiel-Server entschlüsselt sie mit seinem privaten Schlüssel und ruft die Benutzer-ID ab. Oder Sie können hier sogar symmetrisch Crypto für die Geschwindigkeit verwenden. –

Antwort

0

Theoretisch ist die beste Option, keine Daten zu teilen, nur eindeutige Kennungen (Primärschlüssel).

In der Praxis sollten Sie die Daten nicht auf diese Weise teilen. Ein Teil des Benutzers gehört zum Spiel, andere Teile können über verschiedene Spiele hinweg geteilt werden. Ich nehme an, deshalb haben Sie die beiden getrennt.

Sehen Sie sich das DDD-Prinzip von Bounded Contexts an und wie Sie separate Dienste auf diese Weise erstellen sollten/können. Allerdings ist es in SOA und/oder Microservices am schwierigsten, beschränkte Kontexte zu definieren.

+0

Nun, ja und nein. Ich teile den Benutzer/das Spiel, um Dinge wie Benutzerprofile, Authentifizierer (für die Bestätigung in zwei Schritten) in einer mobilen Anwendung zu implementieren. Das Benutzerprofil muss über mehrere Spiele und Micro-Dienste verteilt werden. Vielen Dank für Ihre Zeit zu beantworten. – JSjuniorlad

Verwandte Themen