使用Google App Engine的实时多人游戏是否可行?

时间:2011-02-18 18:51:14

标签: google-app-engine multiplayer cloud-hosting

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

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

服务器在处理来自播放器的POST时,首先将收到的哈希码写入内存缓存。如果来自其他播放器的散列还没有在memcache中,它会等待并定期检查memcache以查找其他玩家散列。只要两个哈希都在memcache中,它就会将它们进行相等性比较。如果它们相等,则服务器将每个播放器的命令作为http响应发送给相应的另一个播放器。

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

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

我无法使用XMPP,因为我希望我的游戏能够在受限制的网络中运行,因此必须将其限制为端口80上的http。

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

1 个答案:

答案 0 :(得分:13)

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

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

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

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