我正在为 iPhone 以及最终的 Android 开发一款回合制棋盘游戏。我正在使用 Appcelerator Titanium 来开发它。我的多人游戏设计类似于 Words With Friends。用户准备好后轮流进行,然后对手的游戏板会相应更新。
我的需求之一是拥有一个消息 API,使 2 个玩家的设备能够在移动后相互更新游戏板的状态。考虑使用 JSON 来完成此操作,并在设备上保留一个 JSON 对象,其中包含任何给定时间所有游戏棋盘块的位置。这是需要在本地设备上更新的对象,然后在移动后将更改发送到对手的设备。
我过去曾为移动平台开发过 API,为此我将 PHP 与 MySQL 结合使用,并在 API 服务器和移动设备之间来回发送 JSON。对于低并发用户和通常非大型应用程序来说,效果很好。希望这个能变得巨大;)
所以现在,我开始考虑持久套接字,而不是通用的 httpd 服务器等,以及我的新游戏是否需要它们。我还认为放弃大型 LAMP 堆栈可能是明智之举,为了可扩展性和易于开发,更多地倾向于 Mongo/Couch -> node.js -> iPhone 等数据流。老实说,这也是我第一次涉足非 sql 数据库和 node.js。
有兴趣听到其他人对此的看法和经验,更多的选择/想法,以及我是否以正确的方式思考它,或者只是给自己制造头痛。
首先,Nodejs 非常适合将反向 TCP 代理写入 NoSQL 数据库。您可以让所有标准命令通过,但用您自己的魔法更改/扩展它们的 API,例如让 MongoDB 通过套接字使用 HTTP 或 CouchDB 使用二进制协议。
在选择用于存储棋盘游戏棋子和监控玩家动作的 NoSQL 解决方案时,我认为 Redis 和 CouchDB 是最佳选择。
- CouchDB。它快速、可靠,并且可以处理大量并发 HTTP 连接。这可能是最好的选择,因为与 Redis 不同的是,它可以在文档更改时广播消息。这持续改变API http://guide.couchdb.org/draft/notifications.html#continuous让您可以非常简单地让每个玩家的应用程序监控其棋盘的更改。该请求可能如下所示:
curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000
每当相关文档发生更改时,每个客户端都会在响应中每行收到一个 JSON 对象。 (每 1000 毫秒一个空白换行符作为一种保持活动状态。)
- 雷迪斯。它使用简单的基于行的协议(如 MemcacheD++)通过套接字进行通信,并允许您存储具有任意(甚至是二进制)值的列表、集合、哈希。它非常快,因为一切都发生在内存中,但异步保存到磁盘。但最重要的是你应该评估它,因为它已经PubSub http://code.google.com/p/redis/wiki/PublishSubscribe通知已内置。请注意,您必须通过玩家共享的频道显式发布移动通知,因为当键/值更改时,Redis 不会自动发布。
由于 MongoDB 没有观察发生的变化或进行 pubsub 的机制,我不认为它是一个好的选择,尽管通过额外的努力你可以让它工作。
总而言之,您可以将“大 LAMP 堆栈”替换为单独的 CouchDB、单独的 Redis,或者放置在节点应用程序后面的任何一个,用于过滤/扩展它们已经提供的 API,使其适合您的游戏。
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)