我正在开发一款基于回合制的iPhone游戏,最终用于Android.我正在使用Appcelerator Titanium来开发它.我的多人游戏设计类似于Words With Friends.用户在准备好后轮流,然后相应地更新对手的游戏板.
我的一个需求是拥有一个消息传递API,使得2个玩家的设备能够在移动后相互更新游戏板的状态.考虑使用JSON执行此操作并在设备上保留JSON对象,该对象包含任何给定时间的所有游戏板块的位置.这是需要在本地设备上更新然后在移动后向对手的设备发送更改的对象.
我以前为移动平台做过API,为此我已经将PHP与MySQL结合使用,并在API服务器和移动设备之间来回发送JSON.适用于低并发用户以及通常非大规模应用程序.这是希望这个会变得庞大;)
所以现在,我开始考虑持久套接字,而不是一般的httpd服务器等,如果我们的新游戏需要或不需要它们.我也认为放弃大型LAMP堆栈可能是明智的,并且为了可扩展性和易于开发,更倾向于使用像Mongo/Couch - > node.js - > iPhone这样的数据流.老实说,这将是我第一次进入非sql db和node.js.
有兴趣听取他人对此的看法和经验,更多的选择/想法,以及我是否正确地思考它,或者只为自己制造麻烦.
首先,Nodejs非常适合编写反向TCP代理到NoSQL数据库.您可以让所有标准命令通过,但使用您自己的魔法改变/扩展其API,例如使MongoDB说HTTP或CouchDB通过套接字说二进制协议.
在选择NoSQL解决方案来存储棋盘游戏和监控玩家移动时,我认为Redis和CouchDB是最佳候选者.
CouchDB的.它快速,可靠,并且可以处理大量并发HTTP连接.这可能是最好的选择,因为与Redis不同,它可以在文档发生变化时广播消息.在连续变化的API使得它超级简单的让你有每个玩家的应用程序监视器改变他们的董事会.请求可能如下所示:
curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000
每当更改相关文档时,每个客户端都会在响应中每行接收一个JSON对象.(并且每1000毫秒一个空白的换行符作为一种保持活动.)
Redis的.它使用简单的基于行的协议(如MemcacheD ++)来讨论套接字,并允许您存储具有任意 - 甚至二进制 - 值的列表,集合,散列.它非常快,因为一切都发生在内存中,但是异步地保存到磁盘.但最重要的是你应该对它进行评估,因为它已经有了PubSub通知.请注意,你必须通过玩家共享的频道明确发布移动通知,因为Redis不会在键/值发生变化时自动发布.
由于MongoDB没有一种机制来观察变化,因为它们正在发生或正在使用pubsub,我认为它不是一个好的选择,尽管需要付出额外的努力才能让它发挥作用.
总而言之,您可以单独使用CouchDB替换"大LAMP堆栈",单独使用Redis,或者将任何一个放置在节点应用程序之后,将其已经提供的API过滤/扩展为适合您游戏的内容.
祝你好运!