6

我目前正在开发一款实时多人游戏,并一直在评估各种基于云的托管解决方案。我不确定 App Engine 是否符合我的需求,如果有任何反馈,我将不胜感激。

本质上,我希望系统像这样工作:玩家 A 计算第 n 轮,并在该轮结束时根据游戏状态生成一个散列。然后,他将该轮的命令和哈希作为 http POST 发送到服务器。玩家 B 并行地做同样的事情。

服务器在处理来自玩家的 POST 时,首先将接收到的哈希码写入内存缓存。如果来自其他玩家的哈希还没有在内存缓存中,它会等待并定期检查内存缓存中其他玩家的哈希。一旦两个哈希都在内存缓存中,它就会比较它们是否相等。如果它们相等,则服务器将每个玩家的命令作为 http 响应分别发送给另一个玩家。

像这样的一轮应该持续大约半秒,这意味着每个玩家每秒有两个请求。

当然,这种方式只有在至少有两个应用程序实例运行时才有效,因为必须并行处理两个请求。此外,内存缓存必须在所有实例中保持一致、相当可靠并立即更新。

我不能使用 XMPP,因为我希望我的游戏能够在受限网络中运行,所以它必须限制为端口 80 上的 http。

有没有办法强制应用程序的两个实例始终运行?我的设计中是否存在明显的缺陷?您认为这样的架构可以在 App Engine 上运行吗?如果没有,您会建议什么基于云的解决方案?

4

1 回答 1

13

我相信这可行。您了解/测试的关键 API 可能是Channel API。这就是允许客户端和服务器之间来回通信的原因。

下一个要担心的问题是内存缓存。一般来说,它是可靠的,但在最严格的意义上,我们应该假设 memcached 数据可能随时消失。

如果您决定不能冒这样丢失数据的风险,那么您需要将其保存在数据存储中,这意味着您必须进行试验以确保每回合可以维持 2 次移动。我认为这是可能的,但并非微不足道。如果您说每 3 秒移动 1 次,我会说“没问题”。但是每秒对一个实体的多次更新开始违反每秒写入的实际限制,特别是如果它们是事务性的。

运行多个实例将不是问题 - 如果需要,您可以付费让实例保持温暖。

于 2011-02-18T19:14:07.507 回答