Frage

Das Spiel ist ein niedrige Grafik (SVG) strategisches Spiel. Jeder Server stellt eine Game Domain mit seinen Spielern. Alle Server sollten in der Lage sein, miteinander zu reden, als Spieler (im Spiel) von Domäne zu Domäne bewegen kann / senden „diplomatische Boten“ etc ..

Wir werden diese Idee entschieden haben, da sie uns ermöglichen endlos die Weltkarte zu vergrößern, ermöglicht es zweite Parteien ihren Spiel-Server zu uns zu verbinden und die vergrößern die Welt noch mehr. Wenn ein Server (und seine Sicherungen) ausfallen, wird das Spiel noch weiter laufen (eine echte verteilte Umgebung).

Wir sind erst am Anfang. Was sind die Plattformen gibt, die wir betrachten sollten, die uns eine solche Welt entwickeln helfen?

War es hilfreich?

Lösung

XMPP, die zuvor als Jabber bekannt ist, könnte ein guter Anfang sein.

Andere Tipps

Eine Menge hängt davon ab, wie viele Daten Sie wollen zwischen den Servern teilen. Sie wollen, dass jeder Server seine eigene Domain, aber was ist Kontodatenbank, Daten zu handhaben, die besitzt, welche Informationen, die Topographie von Domains sind diese Daten sein werden Zentral- und / oder verteilt werden und wie Sie sie halten synchronisiert. Also abgesehen von der Funktionsweise des Spiels, es ist ein weiterer Satz von Metadaten, die die Server brauchen, um darüber zu kommunizieren. Was die Spieldaten, werden Sie wahrscheinlich Ereignisse, Datenobjekte und Informationen über Daten Eigentum und Kontrolle passieren herum. Auf dieses hat es einige im Spiel Uhr Metadaten zu Domänen halten Zeit synchronisiert.

Ich würde wahrscheinlich ein System von asynchronen Warteschlangen mit unterschiedlichen Prioritäten für Metadaten, Anfragen und Antwortnachricht verwendet werden. Protokoll wie XMPP oben auf den Austausch von Nachrichten können Sie Anwesenheitsinformationen, Authentifizierung, Verschlüsselung und andere Vorteile bringen. Aber am Anfang, das Übermittlungsprotokoll selbst ist nicht so wichtig, wie die Struktur der Nachrichten und der Austausch der Daten. Im Wesentlichen sind Übermittlungsprotokolle untereinander austauschbar.

Beispiel: : Ein Spieler sendet eine Spieleinheit X aus Domäne A zu Domäne B Domäne A Server-Nachricht mit Ereignisse zu Domäne B-Server sendet. Während der Warteschlange von Ereignissen Verarbeitung empfängt B-Nachricht und sendet an A A-Anforderungen an eine Anforderungswarteschlange für Daten über Einheit X und Genehmigung / zum Steuerdaten-Einheit X. Anforderungswarteschlange zu modifizieren hat höhere Priorität und wird vor anderen Ereignissen auf Domäne-A behandelt werden Domäne A. sendet angeforderten Daten und Steuer-Token zu Domäne B Antwortwarteschlange mit der höchsten Priorität. Inzwischen Domäne B-Server verarbeitet bereits drei andere Ereignisse, die nicht in der Sitzung warten.

  • Hinweis: A soll nicht mehr erhältliche Version oder an dieser Stelle Daten über Einheit X entfernen. Wenn eine Anforderung für Daten von Domain-C kommt, sollte es von jetzt an diese Anfrage an den Server B übermitteln.
  • Hinweis: Das obige Beispiel kann Daten über Einheit X optimiert wird direkt mit entsprechendem Ereignisse zu senden, aber ich wollte ein einfaches Beispiel zu veranschaulichen
  • .

Das Wichtigste ist, dass Sie die Daten Verkapselungsprotokoll Design haben wird, wahrscheinlich einige XML-Schema. Das Protokoll für die Ereignisbehandlung. Liste der Ereignisse, erlaubt Antworten, Fehlermeldungen, Erholung. Das sind alle Spiel-spezifisch.

Ich würde ernsthaft in Erwägung ziehen Erlang und CouchDB, oder es unter Google App Engine zu implementieren.

Wenn es wirklich verteilt ist dann vermute ich keine Pläne für einen zentralen Server gibt. Das bedeutet, dass Sie, was wirklich suchen ein Kommunikationsmechanismus zwischen den verschiedenen Servern ist. REST und XML-RPC sind beide wirklich einfache Mechanismen für die Server der Lage sein, miteinander zu kommunizieren, zu sprechen, dass ein Benutzer von einem zum anderen bewegen muss.

Sie können auch so etwas wie XMPP verwenden, wie Daniel sagte aber, dass bedeutet, dass Sie einen anderen Satz von Server-Software in den Mix haben Haken neben was auch immer Sie das Spiel haben selbst laufen (was ich vermute, ich aus Ihrer Beschreibung ist wahrscheinlich ein Web-App-Server irgendeine Art).

Aus entwicklungs Sicht jeder Sprache / Framework, das für die Entwicklung von Web-Anwendungen stark ist sollte funktionieren. Ruby on Rails, Python auf Django, zahlreiche Frameworks und Java oder sogar Kuchen w / PHP (ick) würde für die Entwicklungsarbeit arbeiten.

ich so etwas wie dies in der Vergangenheit in Betracht gezogen haben, aber die Probleme der verschiedenen Server vetting (dh, wie handhaben Sie einen Server, der entweder gebrochen oder bösartig ist und lässt ein Spieler gleichzeitig das gleiche Stück auf zwei oder drei andere Server verschieben ), mit ausgestiegen Server befasst sind (was die letzte bestand) passiert Spieler usw. schien sehr anspruchsvoll.

Ich denke, die erste Frage zu beantworten ist, ob das Spiel in Echtzeit oder Ereignis angetrieben wird, und ob der Client ist der Browser oder nicht. Es klingt wie es ereignisgesteuert ist, aber denken Sie daran, dass der Server nicht Ergebnisse in ein einfachen HTML-Client pushen kann effektiv nur auf ein Java-Applet, Embedded-Flash-Film, etc. Wenn Sie eine benutzerdefinierte Client haben, dann gibt es keine Notwendigkeit, eine HTTP zu verwenden, -Stil System auf dem Server, was bedeutet, server-> Server und server-> Client-Kommunikation kann auf die gleiche Art und Weise durchgeführt werden.

Sie sollten einen Blick für „Zinsmanagement“ Papiere über p2p-Spiele haben, werden Sie wirklich interessante Ansätze stellen. Google Schoolar werden Sie wirklich gute Papiere präsentieren.

Aber seien Sie gewarnt, verteilte Anwendungen zu entwickeln ist sehr viel komplexer als einfache Single-Server-Ansätze.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top