我应该怎么建筑师,我的数据库&API服务器为基于多人的iPhone棋盘游戏?(思考node.js,mongo、沙发上等)

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

我工作上的一个转基于棋盘游戏和最终序。我使用的Appcelerator钛发展。我多人设计类似于与朋友的话。用户轮流当准备,然后对手的游戏董事会进行相应的更新。

我需要的是有消息API其使2员的设备更新一个另一个在的状态游戏局后移动。想这样做的结果的方式并保持一个JSON目在设备上的其中含有位置的所有游戏板块在任何给定的时间。这是目的,将需要更新当地的设备,然后发送的变化对手的设备后一个移动。

我已经做了APIs在过去,用于移动平台和做,所以我已经用PHP with MySQL和发JSON之间来回API服务器和移动装置。工作只是花花公子的低并发用户,并通常非大规模应用程序。这里是希望这一会获得大规模;)

所以,现在,而不是一般的httpd服务器等等,我开始认为关于持久性插座,如果他们需要或不为我的新的游戏。我也想,这可能是聪明放弃大灯叠,并可伸缩性,并也许轻松的发展,更倾向数据流的东西喜欢Mongo/长沙发->node.js ->。我会说实话,这将是我第一次进入一个非sql数据库和node.js 为好。

有兴趣听取其他人的需要和经验,更多的选择/想法,以及是否我想它的正确方法,或者只是创造性头痛用的我自己。

有帮助吗?

解决方案

首先,node.js是真棒于书写反TCP代非sql数据库。你可以让所有标准的命令通过,但修改/扩展他们的Api用自己的魔法,例如使MongoDB说HTTP或CouchDB发言的二进制协议过插座。

当涉及到选择一个非sql解决方案用以储存的棋盘游戏的片断和监视播放的动作我想穿红衣和CouchDB是最好的候选人。

  1. CouchDB.它的速度快、可靠,并且可以处理了很多并发HTTP连接。这可能是最佳选择,因为不同节点可以广播消息,当一文件的变化。的 持续不断变化API 使它超简单对你有每个玩家的应用程序监测的变化对他们的董事会。该请求可能看起来像:

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

    每个客户将收到JSON对象每线在响应随时随地有关的文件被更改。(一空白newline每1000ms作为一种保活.)

  2. 穿红衣的.它使用一个简单的基于行的协议(如缓存++)谈一个插座和允许你保存名单,集、哈希具有任意--甚至是二进制--的价值观。它的速度非常快,因为一切都发生在记忆,但是持久的磁盘异步的。但最重要的是你应该评估它,因为它已经拥有 PubSub 通知出炉。 注意,你必须明确发布移动通知一道玩家分享,因为穿红衣不会自动发布时,一个关键/价值的变化。

由于MongoDB没有一个机制,用以观察变化为-他们-发生或做pubsub我不认为这是一个好的选择,虽然有额外的努力,你可以把它的工作。

因此,要结束,你可能能够将"大堆灯"与CouchDB独自一人,穿红衣独自一人,或者一个放在后面一节的应用程序用于过滤/延伸Api他们已经提供到什么适合你的游戏。

好运!

其他提示

我刚开始学习蒙戈,这是不难学。比如索引事情,并解释在那里,工作一样。当涉及到建筑,你要考虑SQL的对面;而是需要一个很好的理由反规范化的,你需要拿出一个很好的理由正常化。在10gen公司的家伙(谁使蒙戈)会说分层的这种想法是对的事情,我将与(暂定)同意思维更自然的方式。发现者感到某种SQL十岁上下的为好,但你仍然会使用地图,减少聚集查询。

据我了解有关的沙发上,最大的区别是有很强的专注于分布式复制的东西。蒙戈更侧重于在海量数据的表现(虽然他们有autosharding和一个伟大的比例故事太多)。我会去蒙戈,除非你实际上要使用沙发的分布方面。

节点一定是有史以来最酷的事情,我认为这将是一个伟大的应用程序。我与它毫无经验,但是从我已阅读,这是伟大的小请求的负载,以及奇妙的比例增加。惯用的JavaScript借自己很好对整个事件模型,并与V8它运行只是猥亵快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top