Wie soll ich meinen Architekt DB & API-Server für ein rundenbasiertes Multiplayer iPhone Brettspiel? (Denken über NodeJS, Mongo, Couch, etc)

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

Frage

Ich arbeite an einem rundenbasierten Brettspiel für iPhone und schließlich Android. Ich verwende Appcelerator Titanium es zu entwickeln. Mein Multiplayer-Design ist ähnlich wie Wörter mit Freunden. Benutzer wechseln sich, wenn Sie fertig, und dann das Spielbrett des Gegners wird entsprechend aktualisiert.

Einer meiner Bedürfnisse ist eine Messaging-API zu haben, die über den Status des Spielbretts der 2 Spieler-Geräte-Update sie ermöglichen nach einem Umzug. Denken, dies zu tun mit JSON und JSON-Objekt auf dem Gerät zu halten, die die Lage aller Spielbrett Stücke zu einem bestimmten Zeitpunkt enthält. Dies ist das Objekt, das auf dem lokalen Gerät zu aktualisieren muß und dann eine Änderung an das Gerät des Gegners senden, nachdem eine Bewegung gemacht wird.

Ich habe für mobile Plattformen APIs in der Vergangenheit getan haben und zu tun, damit ich PHP mit MySQL verwendet habe, und schickte JSON hin und her zwischen dem API-Server und dem mobilen Gerät. Arbeiten nur Dandy für niedrigen gleichzeitigen Benutzer und in der Regel nicht-massive Anwendungen. Hier ist für diese eine Hoffnung, erhalten massiv;)

So, jetzt anstelle eines allgemeinen httpd-Server und dergleichen, ich fange an, über persistente Sockets zu denken, und wenn sie gebraucht werden oder nicht für mein neues Spiel. Ich denke auch, dass es klug sein, kann den großen LAMP-Stack, und die Skalierbarkeit zu verzichten und vielleicht die Entwicklung zu erleichtern, lehnt mehr in Richtung ein Datenfluss von so etwas wie Mongo / Couch -> node.js -> iPhone. Ich will ehrlich sein, es wäre mein erster Ausflug in eine Nicht-SQL-Datenbank und node.js als gut.

Sie interessieren andere zu hören nimmt und Erfahrungen zu diesem Thema weitergeben / Gedanken, und ob ich es richtig denke, oder einfach nur Kopfschmerzen für mich zu schaffen.

War es hilfreich?

Lösung

Zunächst einmal ist NodeJS genial für das Schreiben von Reverse-TCP-Proxies zu NoSQL-Datenbanken. Sie könnten alle Standardbefehle lassen passieren aber ändern / ihre APIs mit Ihrer eigenen Magie erweitern, zum Beispiel MongoDB machen sprechen HTTP oder CouchDB sprechen ein binäres Protokoll über Sockets.

Wenn es darum geht, eine NoSQL-Lösung zum Speichern von Brettspiel Stücke um die Auswahl und Überwachung für Spieler bewegt denke ich entweder Redis und CouchDB sind die besten Kandidaten.

  1. CouchDB. Es ist schnell, zuverlässig und kann viele gleichzeitige HTTP-Verbindungen verarbeiten. Es ist wahrscheinlich die beste Option, da im Gegensatz zu Redis kann es eine Nachricht gesendet, wenn ein Dokument ändert. Die kontinuierlich ändert API es super einfach macht für Sie jeden Spieler App-Monitor haben, für Änderungen in ihren Vorstand. Der Antrag könnte wie folgt aussehen:
    curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000

    Jeden Kunde wird ein JSON-Objekt pro Zeile in der Antwort zu jeder Zeit ein relevantes Dokument geändert wird, erhalten. (Und eine leere Newline alle 1000 ms als eine Art von Keep-Alive.)
  2. Redis. Es verwendet eine einfache Linie-basiertes Protokoll (wie Memcached ++) einen Sockel zu reden und ermöglicht es Ihnen, Listen zu speichern, Sets, Hashes mit beliebigen - auch binär - Werte. Es ist sehr schnell, weil alles im Speicher geschieht aber auf der Festplatte asynchron anhielt. Vor allem aber sollten Sie es bewerten, da es bereits hat PubSub Benachrichtigungen gebacken in. Beachten Sie, dass Sie müssen explizit bewegen Benachrichtigungen über einen Kanal, der die Spieler Aktie veröffentlichen, weil Redis wird nicht automatisch, wenn ein Schlüssel / Wert-Änderungen veröffentlichen.

Da MongoDB keinen Mechanismus zur Beobachtung Veränderungen wie-sie-geschehen oder tun PubSub halte ich nicht für eine gute Option, um es, wenn auch mit zusätzlichem Aufwand man könnte es funktionieren.

So zu schließen, können Sie möglicherweise „der großen LAMP-Stack“ mit CouchDB allein zu ersetzen, Redis allein oder entweder hinter einem Knoten App platziert zum Filtern / Ausfahren des APIs sie bereits in etwas schaffen, das Ihr Spiel paßt.

Viel Glück!

Andere Tipps

Ich habe gerade erst begonnen Lernen Mongo, und es ist nicht schwer zu lernen. Dinge wie Indizes und zu erklären sind und die gleiche Arbeit. Wenn es um Architektur geht, wollen Sie das Gegenteil von SQL denken; stattdessen einen guten Grund, um zu de-normalisieren, müssen Sie mit einem guten Grund zu normalisieren kommen. Die Jungs von 10gen (die Mongo machen) werden sagen, dass das Denken der hierarchischen eine natürliche Art und Weise des Denkens über die Dinge, die ich mit (vorläufig) zustimmen würde. Finders fühlen Art von SQL-ish als auch, obwohl Sie noch Karten reduzieren für Abfragen Aggregation verwenden wird.

Von dem, was ich über Couch verstehen, der große Unterschied ist, gibt es einen starken Fokus auf der Replikation, was verteilt. Mongo konzentriert sich mehr auf die Leistung über große Datenmengen (obwohl sie autosharding und eine große Skalierungs Geschichte zu haben). Ich würde Mongo, wenn Sie tatsächlich gehen, um die verteilte Aspekte der Couch verwenden.

Node hat bekommt immer die coolste Sache zu sein, und ich denke, dies ist eine große Anwendung für sich wäre. Ich habe null Erfahrung mit ihm, aber von dem, was ich gelesen habe, ist es für viele kleine Wünsche und skaliert wunderbar auf. Idiomatische Javascript eignet sich ganz gut für die gesamte Vielseitigkeitsmodell und mit v8 läuft es obszön schnell einfach.

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