Först och främst är Nodejs fantastiskt för att skriva omvända TCP-proxies till NoSQL-databaser. Du kan låta alla standardkommandon passera men ändra/förlänga deras API:er med din egen magi, t.ex. få MongoDB att tala HTTP eller CouchDB att tala ett binärt protokoll över sockets.
När det gäller att välja en NoSQL-lösning för lagring av brädspel och övervakning av spelarrörelser tror jag att antingen Redis och CouchDB är de bästa kandidaterna.
- CouchDB. Det är snabbt, pålitligt och kan hantera många samtidiga HTTP-anslutningar. Det är förmodligen det bästa alternativet eftersom det till skillnad från Redis kan sända ett meddelande när ett dokument ändras. API:et för kontinuerliga ändringar
gör det superenkelt för dig att låta varje spelares app övervaka ändringar i deras tavla. Begäran kan se ut så här:
curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000
Varje klient kommer att få ett JSON-objekt per rad i svaret när som helst ett relevant dokument ändras. (Och en tom nyrad var 1000:e ms som ett slags keepalive.) - Redis. Den använder ett enkelt linjebaserat protokoll (som MemcacheD++) för att prata över en socket och låter dig lagra listor, uppsättningar, hash-värden med godtyckliga--även binära--värden. Det är väldigt snabbt eftersom allt händer i minnet men hålls kvar på disken asynkront. Men framför allt bör du utvärdera den eftersom den redan har PubSub aviseringar inbakade. Observera att du explicit måste publicera flyttaviseringar över en kanal som spelarna delar eftersom Redis inte automatiskt publicerar när en nyckel/värde ändras.
Eftersom MongoDB inte har en mekanism för att observera förändringar när de händer eller göra pubsub, anser jag det inte vara ett bra alternativ, men med extra ansträngning kan du få det att fungera.
Så sammanfattningsvis kan du kanske ersätta "den stora LAMP-stacken" med enbart CouchDB, enbart Redis, eller endera placerad bakom en nodapp för att filtrera/utvidga de API:er de redan tillhandahåller till något som passar ditt spel.
Lycka till!