2011-02-18 47 views
8

我目前正在开发一款实时多人游戏,并且一直在评估各种基于云的托管解决方案。我不确定App Engine是否符合我的需求,并会很感激任何反馈。使用Google App Engine的实时多人游戏是否可行?

从本质上说,我希望系统是这样工作的:玩家A计算n轮,并在该回合结束时生成一个散列出来的游戏状态。然后,他将他的命令发送到服务器,并将散列作为http POST发送到服务器。玩家B并行执行相同的操作。

的服务器,而从球员处理POST,首先将所接收的散列码的内存缓存。如果来自其他玩家的散列尚未存在于内存缓存中,它将等待并定期检查其他玩家散列的内存缓存。只要这两个哈希都在memcache中,它就会比较它们是否相等。如果它们相等,则服务器将每个播放器的命令作为http响应发送给另一个播放器。

像那样的一轮谈判应历时约半秒,这意味着每秒每名球员两个请求。

当然,这样做只会如果有应用程序运行的至少两个实例工作,因为两个要求必须用并行处理的这种方式。此外,内存缓存必须在所有实例中保持一致,相当可靠,并立即更新。

我不能使用XMPP,因为我希望我的比赛才能够限制网络中运行,所以它必须被限制在HTTP端口80上

有没有办法强制执行该应用程序的两个实例总是在跑?我的设计中是否有明显的缺陷?你认为像这样的架构可能适用于App Engine吗?如果不是,您会建议哪种基于云的解决方案?

回答

13

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

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

如果你决定,你不能冒失去这样的数据,那么你需要坚持它在数据存储,这意味着你必须进行试验,以确保您能够维持每回合2个移动。我认为这是可能的,但并不平凡。如果你说每3秒钟移动一次,我会说“没问题”。但是,每秒对多个实体进行多次更新开始与每秒写入的实际限制相冲突,特别是如果它们是事务性的。

有运行将不会是一个问题的多个实例 - 你可以支付,如果要保持实例温暖。

+2

非常感谢您指出Channel API!使用它,我甚至不需要同时运行两个实例。它完全解决了我的问题。 – 2011-02-18 19:31:16

相关问题