Architektur für die sozialen Multiplayer-Browsergame (Back-End-Wahl + Frontend Wahl [flash / Silverlight]) [geschlossen]

StackOverflow https://stackoverflow.com/questions/638272

Frage

Ich denke über Online-Multiplayer-Spiel soziale Entwicklung. Der freigegebene Zustand der Welt würde etwas schnell auf dem Backend benötigen, so die möglichen Lösungen zu sein scheinen:

  1. schnelle Spiel-Engine auf dem Server (z. B. C ++) und einige Frontend Sprache (PHP / Python / Rubin) + flash

  2. ganze Stapel in Python (twisted oder Stackless Python) + Flash

  3. .NET (asp.net oder asp.net MVC) + flash

  4. NET + Silverlight

erstes kann ein Übermaß von Produktivität Sicht (3 heterogenes Schichten)

sein

Nr. 4 kann Programmierer Himmel (gemeinsame Umwelt auf allen Ebenen), aber:

  • So etwas hat jemals mit Silverlight, vielleicht dort gebaut worden sind einige Showstopper um die Ecke versteckt
  • Es kann schwierig sein, Silverlight-Designer finden
  • Trotz Flash-Film / Clip Modell kritisiert wird, wenn zu SL voller OO Architektur verglichen wird es keinen Vorteil, wenn es um die Gestaltung zusätzliche Teile der virtuellen Welt von externen Designern kommt? Sie können einfach vorbereiten .swf mit zB. 4 Perspektiven eines Postens auf 4 Frames - wäre es nicht mit SL härter
  • Silvelight fehlt anscheinend in einigen Gaming-Features (wie Kollisionserkennung)

Was denken Sie?

[EDIT] Das Spiel selbst Teil des größeren Portals sei -. Daher wäre es schön, den Motor mit einigem Web-Framework zu integrieren

War es hilfreich?

Lösung

Option 2 - mit stackless Python - ist das, was Eve Online nutzt

.

http://support.eve-online.com /Pages/KB/Article.aspx?id=128


Bearbeiten

Bis Sie aktuelle Software haben, natürlich ist es unmöglich, eine Architektur zu schaffen, die einigermaßen gut durchführt. So, hier jedes Urteil ist nur reine Spekulation.

Sie sich das folgende jedoch.

  1. Statische Inhalte (JS-Dateien, CSS-, .png des etc.) neigen dazu, Ihre Netzwerk-Bandbreite zu dominieren. Sie werden einen Reverse-Proxy-Server verwenden müssen (zum Beispiel Tintenfisch) zu handhaben.

  2. Squid hat den Inhalt von irgendwo zu bekommen. Sie wollen einen leichten Dateiserver zur Verfügung, um statische Inhalte Tintenfische. Nginx oder lighttpd oder so etwas. Apache wird für diese Arbeit, aber - in einem Ausmaß, -. Es übertrieben sein könnte

  3. Ihre dynamische Inhalte - es scheint -. Wird in zwei Formen annehmen

    • JSON, das Spiel zu unterstützen.

    • HTML, das Portal zu unterstützen.

    Dazu würden Sie am glücklichsten mit einem mod_wsgi Motor sein. Apache tut dies sicherlich; ngingnx und lighttpd könnte auch funktionieren.

    • Ihr JSON Material sollte eine Gruppe von URIs sein. REST ist ein gutes Design-Muster. Durch mod_wsgi, verbinden Sie diese mit dem Spiel orientierten Server - falls erforderlich - stackless Python. Front-End (Apache, zum Beispiel) hat einen Standort, Verzeichnis oder Virtualhost diese URIs und sie an ein mod_wsgi Daemon zu filtern, die das Spiel dient. Schauen Sie sich Wekzeug diese zu bauen.

    • Ihr HTML-Material ist ein weiterer Satz von URIs. Durch mod_wsgi, verbinden Sie diese mit einem Django-Server herkömmlichen Python ausgeführt wird. Front-End (Apache, zum Beispiel) hat einen Standort, Verzeichnis oder Virtualhost diese URIs und sie an ein mod_wsgi Daemon zu filtern.

Andere Tipps

verbrachte ich ein Jahr auf einem Massively Multiplayer Online-Spiel arbeite Silverlight für das Frontend und Python für das Backend (I tatsächlich Ironpython in Silverlight verwendet, um die Entwicklung zu vereinfachen)

Silverlight ist sehr gut geeignet für diese, würde ich nicht ein ernsthaftes Online-Spiel in etwas anderes tun. Es hat bereits 35% des Marktes, durch die Zeit, die Sie sollten Rolle mehr viel hoch genug sein, nicht auf die Entwicklung fertig sind. Für ernsthafte Spiele, die meisten Leute wirklich nichts dagegen, eine 4MB Browser-Plugin installieren. Wenn Sie nur ein wenig Asteroiden Klon möchten, verwenden Sie Flash.

Wenn ich es über zu tun habe, glaube ich, Python für den Server halten würde, weil es die Server-Technologie ist mit Ich bin fähigsten, aber ich denke, ich C # auf dem Frontend verwenden würde und JSON verwende für die Datenweitergabe .

Der beste Rat, den ich Ihnen geben kann ist:

  1. Nutzen Sie vorhandene Bibliotheken und Code so viel wie möglich
  2. Denken Sie nicht über die Leistung vorzeitig

Der schwierigste Teil des Spiels werden wird Finishing, Use-Technologie wissen Sie gut, und für Ihre Zeit optimieren, nicht den Code. Hoffentlich können Sie tun, was ich konnte nicht - das verdammte Spiel beenden:)

Bearbeiten

In Bezug auf, warum würde ich C # verwenden, wenn ich es zu tun habe über:

Ironpython hatte es Vor- und Nachteile. Es war toll, dass ich Code-Dateien gemeinsam nutzen können (Konstanten, Modelle, usw.) über Server und Client. Einen Wechsel und Auffrischen der Browser es war fantastisch zu sehen. Debugging war nicht so freundlich wie C #.

Aber in gewisser Weise ist es ein Bürger zweiter Klasse zu C #, Datenbindung hat nicht funktioniert, und Sie können nicht Ironpython Klassen in XAML verwenden. Ladezeit war ein Problem, also eigentlich viel Aufwand verbrachte ich parallel einzurichten Import auf Hintergrund-Threads es zu beschleunigen. Wegen des zweiten Bürgerstatus in dem XAML betrifft, so habe ich eine Template-Sprache XAML zu erzeugen, als ob es html war, die eigentlich besser ausgearbeitet als Datenbindung, aber keine Python-Vorlage Sprachen arbeiteten in Ironpython, so schrieb ich meine eigenen ( ein anderes Mal Waschbecken.)

Um Sharing-Modelle ermöglichen musste ich meine eigene ORM schreiben. Das war einfach genug. Aber sie zu übertragen ging ich auf JSON und machte eine optimierte Binärformat statt, die zwischen Ironpython und Python gearbeitet. Das war eine andere Zeit sinken.

Im Nachhinein sollte ich nicht von all den Kaninchen Pfade abgelenkt bekommen haben.

Verdrehte wurde zu diesem Zweck mit Erfolg eingesetzt. basiert auf asynchronius nennt es für Anwendungen, die persistente Verbindungen sehr effizient ist. Auch sie hat eine schöne RTMP-Implementierung für die Verwendung mit Flash. Prüfen Sie chesspark, es ist gebaut mit Verdreht:

http://www.chesspark.com/

Plus die Game-Engine hat nicht wirklich in C / C ++ sein. Abhängig von der Komplexität und Art des Spiels. Aber es gibt auch die pygame Bibliothek, die ziemlich gut ist.

Ich persönlich würde Sie davon abhalten, Silverlight verwenden. Die Flash-Plugin ist viel besser angenommen und wird auch weiterhin in absehbarer Zeit sein, vor allem auf nicht ms-Betriebssystemen. nehmen Sie das nicht zu Herzen, aber ich würde einfach nicht installieren Silver Ihr Spiel zu sehen.

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