2010-08-31 46 views
6

我正在爲iPhone和最終Android的基於回合的棋盤遊戲工作。我正在使用Appcelerator Titanium來開發它。我的多人遊戲設計類似於Words With Friends。準備好後,用戶輪流對戰,然後相應更新對手的遊戲板。我應該如何爲基於回合的多人iPhone板遊戲構建我的數據庫和API服務器? (思考nodejs,mongo,沙發等)

我的一個需求是擁有一個消息傳遞API,使得玩家的設備能夠在移動之後相互更新遊戲板的狀態。想想用JSON做這件事,並在設備上保存一個JSON對象,該對象包含任何給定時間的所有遊戲棋子的位置。這是需要在本地設備上更新的對象,然後在移動完成後向對手的設備發送更改。

我過去爲移動平臺完成了API,爲此我使用PHP與MySQL並在API服務器和移動設備之間來回發送JSON。對低併發用戶以及一般非大規模的應用程序而言,這種方法很適合。這裏是希望這個將得到巨大的;)

所以,現在,而不是一般的httpd服務器等,我開始考慮持久套接字,如果他們需要或不需要我的新遊戲。我也在想,放棄大型LAMP堆棧以及可擴展性和可能的​​開發容易,更傾向於像Mongo/Couch - > node.js - > iPhone這樣的數據流。老實說,這將是我第一次進入非sql數據庫和node.js。

有興趣聽​​到別人對此的看法和體驗,更多的選擇/想法,以及我是否以正確的方式思考它,或只是爲自己製造頭痛。

+0

對於任何有興趣的人,我只是發佈了一個新的問題,繼續這個過程:http://stackoverflow.com/questions/3618052/should-i-connect-directly-to-couchdbs-socket-and-pass- http-requests-or-use-node – k00k 2010-09-01 12:56:08

回答

7

首先,Nodejs非常適合將反向TCP代理寫入NoSQL數據庫。你可以讓所有的標準命令通過,但用你自己的魔法來改變/擴展它們的API,例如使MongoDB講HTTP或CouchDB通過套接字說一個二進制協議。

當談到選擇NoSQL解決方案來存儲棋盤遊戲和監控玩家動作時,我認爲Redis和CouchDB是最好的選擇。

  1. CouchDB。它速度快,可靠,可以處理很多併發的HTTP連接。這可能是最好的選擇,因爲與Redis不同的是,它可以在文檔更改時傳播消息。continous changes API使您可以非常簡單地讓每個玩家的應用程序監視其電路板的變化。請求可能如下所示:

    curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000

    每次客戶端都會在響應中的每行中收到一條JSON對象,隨時更改相關文檔。 (作爲一種保持活動,每隔1000ms會有一個空白換行符。)

  2. Redis。它使用簡單的基於行的協議(如MemcacheD ++)來通過套接字進行通信,並允許您使用任意 - 甚至二進制值來存儲列表,集合,哈希。它的速度非常快,因爲所有內容都是在內存中發生的,但是會以異步方式持久保存到磁盤。但最重要的是,您應該對它進行評估,因爲它已經有PubSub通知。請注意,您必須在播放器共享的頻道上顯式發佈移動通知,因爲Redis在鍵/值更改時不會自動發佈。

因爲MongoDB中沒有觀察變化,他們-發生或做發佈 - 訂閱我不認爲這是一個不錯的選擇,雖然有額外的努力,你可以使它發揮作用的機制。因此,總結一下,您可以單獨使用CouchDB,單獨使用Redis,或者放置在節點應用程序後面的「LAMP堆棧」來過濾/擴展它們已經提供的API到適合您的遊戲的東西中。

祝你好運!

+0

感謝您的詳細描述。自從你發佈帖子後,我已經下載了couchDB並且玩了一下。非常酷的東西。當我有更多的問題時我會回覆,我相信很快就會出現! – k00k 2010-08-31 21:15:33

2

我剛剛開始學習mongo,並不難學。像索引和解釋這樣的東西在那裏工作是一樣的。當涉及到體系結構時,您想要思考SQL的另一面;而不是需要一個很好的理由去規範化,你需要想出一個正常化的好理由。 10gen(做mongo)的人會說,考慮層次關係是一種更自然的思考事物的方式,我會同意(暫定)。 Finder也會對sql-ish有所瞭解,儘管您仍然會使用map-reduce來進行聚合查詢。

從我對沙發的理解來看,最大的區別在於它非常注重分佈式複製。 Mongo更專注於大量數據的性能(儘管它們具有自動調整功能,並且也具有很好的縮放比例)。我會去mongo,除非你真的要使用沙發的分佈式方面。

節點必須是有史以來最酷的東西,我認爲這將是一個偉大的應用程序。我對它沒有經驗,但是從我讀過的內容來看,它對於大量小請求來說非常棒,並且可以很好地擴展。習慣性JavaScript對整個事件模型有很好的適應性,而且它的v8運行速度非常快。

+1

如果你喜歡MongoDB,你應該給CouchDB一些嘗試的方法。它非常不同,因爲它提供了一個內置的web服務器,CouchApps等等,如何處理性能和持久性。如果你想要做的只是存儲JSON數據,那麼它可以正常工作,但是你可以用CouchDB構建整個web應用程序沒有別的。 http://guide.couchdb.org/ – 2010-08-31 01:56:51

相關問題