我应该如何为回合制多人 iPhone 棋盘游戏构建数据库和 API 服务器? (考虑nodejs、mongo、couch等)

2024-01-26

我正在为 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 是最佳选择。

  1. 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 毫秒一个空白换行符作为一种保持活动状态。)

  2. 雷迪斯。它使用简单的基于行的协议(如 MemcacheD++)通过套接字进行通信,并允许您存储具有任意(甚至是二进制)值的列表、集合、哈希。它非常快,因为一切都发生在内存中,但异步保存到磁盘。但最重要的是你应该评估它,因为它已经PubSub http://code.google.com/p/redis/wiki/PublishSubscribe通知已内置。请注意,您必须通过玩家共享的频道显式发布移动通知,因为当键/值更改时,Redis 不会自动发布。

由于 MongoDB 没有观察发生的变化或进行 pubsub 的机制,我不认为它是一个好的选择,尽管通过额外的努力你可以让它工作。

总而言之,您可以将“大 LAMP 堆栈”替换为单独的 CouchDB、单独的 Redis,或者放置在节点应用程序后面的任何一个,用于过滤/扩展它们已经提供的 API,使其适合您的游戏。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该如何为回合制多人 iPhone 棋盘游戏构建数据库和 API 服务器? (考虑nodejs、mongo、couch等) 的相关文章

  • Cocos2d - 将 GLImageProcessing 效果应用于 CCSprite

    苹果的oplenglGL图像处理 http developer apple com library ios samplecode GLImageProcessing Introduction Intro html加载图像并应用图像调整 亮度
  • 如何使用 Create-React-App 节点服务器定义 MIME 类型?

    我正在尝试处理这个 WebAssembly 注释 注意 要运行instantiateStreaming and compileStreaming 您需要您的网络服务器来提供 wasm 文件application wasmMIME 类型 ht
  • 使用 Java 进行 MongoDB 查询。计算数组中的匹配项

    我在 Mongo 中存储了类似于以下内容的数据 LIST NAME a VALUE z NAME b VALUE y NAME c VALUE x NAME d VALUE w NAME e VALUE v NAME f VALUE u N
  • 如何测试 UITextField 是否为零?

    我正在尝试制作我的应用程序的一部分 如果该人不更改我的 UITextField 中的空白文本 那么他 她将无法继续下一步 基本上 我想测试 UITextField 的 nil 文本 我已经使用了 if text 方法 但是如果用户单击 UI
  • Bot Framework Node.js 发送给特定用户的临时消息

    我已经盯着这个问题好几个小时了 找不到解决方案 即使根据所有建议 它应该很容易 https learn microsoft com en us bot framework nodejs bot builder nodejs proactiv
  • 在 Node 中使用 Babel 导入与请求 [重复]

    这个问题在这里已经有答案了 我想在一个文件中导入一个类 use strict import models from model class Foo bar export default new Foo 当我使用导入时它有效 例如 impor
  • Chrome/Firefox 在后台发送两个 POST,间隔恰好 5 秒,仅调用一次来获取 Nodejs 8.0.0 服务器

    注意 这不是飞行前选项 也不是网站图标或其他类似内容 实际上是 2 个帖子 下面有一个屏幕截图可以更清楚地显示这一点 我的规格 版本 macOS 塞拉利昂版本 10 12 3 Chrome 版本 61 0 3128 0 官方版本 开发版 6
  • 如何在Electron WebView中连接到代理?

    因为我可以通过连接到免费代理服务器 或付费 目前用作电子 JS 解决方案作为桌面应用程序 代理列表服务器示例 http proxylist hidemyass com http proxylist hidemyass com 您可以使用 s
  • 在不同的捆绑包上测试 iPhone 应用内购买?

    我们有一组 iPhone 应用程序的 Beta 测试人员 最近 我们在应用程序中添加了应用内购买功能 在此之前 我们会使用单独的捆绑 ID 和名称向 Beta 测试人员发送临时版本 以便他们可以在手机上拥有商店版本和临时版本 然而 似乎我们
  • pymongo.errors.BulkWriteError:发生批量操作错误(MongoDB 3.4.2、pymongo 3.4.0、python 2.7.13)

    我正在迁移数亿条该格式的推文 id str created at text 使用 pymongo 将文本文件转换为 MongoDB 为每个用户创建一个集合来存储他 她的推文 我使用的插入方法是insert many 常常会遇到BulkWri
  • 由于 Chrome 修订,Firebase puppeteer PDF 功能超时

    我有一个 Firebase 函数来创建 PDF 文件 最近 由于 Chrome 修订版 而超时 我既不明白错误消息 也不明白出了什么问题 当我在 MacOS 下将其本地部署时 该功能有效 TimeoutError Timed out aft
  • 如何在CentOS 5.3上安装php-mongodb?

    我已经在我的 VPS 上安装了 mongoDB 效果很好 现在我想安装 php 驱动程序以使 php 与 mongoDB 一起工作 我跟着蒙戈安装 http www php net manual en mongo installation
  • 多次添加同一个子视图来查看

    我不知道这是否可行 但我想做的是将子视图多次添加到视图中 我尝试过这样的事情 self view addSubview newView newView center CGPointMake 160 100 self view addSubv
  • 防止UIScrollView的UIPanGestureRecognizer遮挡UIScreenEdgePanGestureRecognizer

    我有一个UIScrollView它填满了我应用程序的一页上的屏幕 但我希望允许用户从屏幕边缘平移以显示其后面的视图 问题是 UIScrollView 窃取了我的触摸UIScreenEdgePanGestureRecognizer在屏幕边缘
  • 私人 iPhone 应用程序?

    我有兴趣编写连接到内部网或外部网的应用程序 换句话说 我想为我的客户制作私人应用程序 但我不希望每个人都能够访问它并能够下载它 您知道是否有一种方法可以将企业应用程序仅分发给特定的人 Android 也做同样的事情吗 The iPhone
  • iPhone 崩溃日志?

    我已经配置了一部 iPhone 并让用户安装了该应用程序 它失败 是否有崩溃日志可以让我看到 iPhone 上失败的原因 Ian 如果您可以使用 xcode 将 iPhone 连接到计算机 则在管理器窗口中它会显示每个应用程序崩溃的崩溃日志
  • 如何使用Create React App安装React

    嗨 我对反应真的很陌生 我不知道如何实际安装它 也不知道我需要做什么才能在其中编写代码 我下载了node js并且安装了v12 18 3以及NPM 6 14 6 但是每次我尝试在许多网站上提到的create react app安装方法中输入
  • NSURL URLWithString:引发异常

    简而言之 NSURL URLWithString 似乎引发了一个例外 根据文档 如果字符串格式错误 则返回 nil 没有提到在任何情况下都会引发异常 除此之外 我还对 URL 进行编码并检查nil在将字符串转换为 URL 之前 任何人都可以
  • GMSMapView 中的倒多边形

    我必须在我的 iPhone 项目中使用 Google 地图 并且我正在使用 GMSPolygon 来绘制多边形 但是如何填充地图上除多边形内部之外的所有位置 就像下图一样 谢谢 我玩过你的问题 主要思想是用多边形填充整个地球 然后为您的特定
  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数

随机推荐

  • 有没有 Doctrine 和 Propel 的比较?

    我看过很多 Doctrine 与 Propel 的比较 但没有一个真正说服我选择 Doctrine 而不是 Propel 我已经使用 Propel 一段时间了 几乎我读到的每一个比较都表明 Propel 没有被很好地记录为第一个问题 而且我
  • ASIHTTPRequest 与 AFNetworking 与 NSUrlRequest

    过去我用过ASIHTTPRequest但现在有NSURLRequest 我们应该使用NSURLRequest现在 有什么缺点吗 对于现在阅读本文的人 我最终使用了AFNetworking正如答案中提到的 https github com A
  • asp.net缓存多线程锁webparts

    我有以下场景 假设我们有两个不同的 Web 部件对相同的数据进行操作 一个是饼图 另一个是数据表 在其 Page Load 中 它们从数据库异步加载数据 加载后将其放入应用程序缓存中以供进一步使用或由其他 Web 部件使用 因此每个 Web
  • 使用 keras tokenizer 处理不在训练集中的新单词

    我目前正在使用 Keras Tokenizer 创建单词索引 然后将该单词索引与导入的 GloVe 字典进行匹配以创建嵌入矩阵 然而 我遇到的问题是 这似乎破坏了使用词向量嵌入的优点之一 因为当使用经过训练的模型进行预测时 如果它遇到不在分
  • JAX-WS/CXF 中的 /encoded 和 /literal 支持

    我从未在 java 中使用过 RPC 调用 所以我对需要研究的一些遗留代码有点困惑 如果可能的话 我希望您能帮助我阐明如何将 CXF 与 RPC 结合使用 1 CXF不支持rpc encoded调用 JAXWS 2 0 不支持 Rpc 编码
  • 不精确浮点常数的警告

    诸如 为什么 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 8 不是 让我想到 最好让编译器警告浮点常量 它舍入到二进制浮点类型中最接近的可表示形式 例如 0 1 和 0 8 以基数 2 浮点舍入 否则它们需要无限量的
  • 如何编译 GnuTLS

    我尝试在 Centos 6 2 上多次编译 GnuTLS 库 但没有成功 这些是步骤 我下载了荨麻2 4 root localhost opt wget http www lysator liu se nisse archive nettl
  • AngularJS 模板。内部JS不执行

    我有很多模板html页面 其中包含js代码 当我的 RouteProvider 加载此模板之一时 JS 不会执行 我不想使用 eval 我可以在外部 js 文件中编写代码并使用 requireJS 但我不知道如何使用 requireJS 停
  • JSON 数组结构变体

    以下是 3 种 JSON 数组结构格式 第一个是 JSON org 上概述的 是我熟悉的 格式 1 People name Sally age 10 name Greg age 10 第二个是命名数组元素的细微变化 我个人并不关心它 你不在
  • 如何在 Eclipse 中包含 javax.jms.* ?

    我正在尝试使用 eclipse 实现 JMS 但是当我尝试保存代码时 它表明javax jms cannot be resolved并且有no suggestions以及它推荐的 我怎样才能包含它并使用它 当我谷歌搜索时 我发现 javax
  • 如何找出我的控制台应用程序正在哪个目录中运行?

    如何找出我的控制台应用程序在 C 中运行的目录 要获取 exe 文件所在的目录 AppDomain CurrentDomain BaseDirectory 获取当前目录 Environment CurrentDirectory
  • Meteor JS 无法对数据进行排序

    我的主体中有一个按钮 单击该按钮时 应按降序排序 当我这样做时 什么也不会发生 我相信我的代码是正确的 但也许我遗漏了一些东西 这是js Tasks new Mongo Collection tasks Template body even
  • 如何使用 pdf.js 渲染 pdf 文件?

    我创建了一个 html 文件 内容如下索引 html
  • 使用 document.getElementById 更改“id=”的值

    这是正确的方法吗 a href class btn load add a a href here a 如
  • 重新加载 React Router 应用程序时出现 404 错误

    当我在本地服务器上重新加载我的应用程序时 一切都很好 但是当我在 gh pages 上托管时重新加载页面时 出现 404 错误 它不会在主页上执行此操作 但会在其他两个页面上执行此操作 这是否与远程托管有关 我对 React Router
  • Swift CoreBluetooth:CentralManager 应该在单独的线程中运行吗?

    现在我在主线程中运行所有内容 到目前为止 我只注意到 UI 变得有点滞后的多次中的一次 我想知道 utilizint CoreBluetooth 库在并发方面的一般做法是什么 您能否提供一些示例 具体应该在其他队列中运行什么 如果有的话 我
  • MQTT 连接在 Node 中工作,但不能作为 ReactJS 组件

    当我在 nodeJS 中运行它时 我有这个 mqtt 连接工作正常 但是当我将它移动到反应组件中时 我收到此错误 WebSocket 握手期间出错 net ERR CONNECTION RESET 我读过这是由与这里的默认端口有关的事情引起
  • J2ME 软键包装器

    阅读一些文章 告诉我软键因设备而异 有人说 6 或 21 表示左软键 7 或 22 表示右软键 鉴于这种情况 是否有任何好的包装器或功能或最佳实践来正确处理它 如果不适用于所有设备 那么支持大多数设备的最佳方式是什么 有轻微的黑客攻击或根本
  • Await 阻塞 UI 线程,网络相关

    我的 Windows 应用商店应用程序中有这段代码 我在其中处理按钮单击 但不知何故 当我在极少数情况下单击此按钮时 用户界面会冻结 当我连接到比我通常连接的网络更远的 Wi Fi 网络时 通常会发生这种情况 考虑到我从互联网上下载了 RS
  • 我应该如何为回合制多人 iPhone 棋盘游戏构建数据库和 API 服务器? (考虑nodejs、mongo、couch等)

    我正在为 iPhone 以及最终的 Android 开发一款回合制棋盘游戏 我正在使用 Appcelerator Titanium 来开发它 我的多人游戏设计类似于 Words With Friends 用户准备好后轮流进行 然后对手的游戏