2017-05-27 49 views
0

我正在研究一个非常有趣的项目,我们希望在内存中保持游戏状态。当服务器启动时,它从数据库加载游戏状态,这是它从数据库读取的唯一时间。只要服务器更改其内存游戏状态,它就会发出相应的写入数据库。Google App Engine中的内存缓存和互斥锁?

每个游戏只有一台服务器写入,如果客户端向错误的服务器发送更新,它会被告知正确的服务器的url,客户端可以再次尝试。

因此,我正在寻找一种方法让App Engine上的游戏状态持续存在内存中,但我很难。我看到的每个地方都说这样的人不应该在内存中拥有状态,但这是我们系统的要求。

如何在App Engine服务器中拥有状态?

PS。请不要告诉我改变我的设计,以便我的服务器没有状态,这是一个很难的要求。

回答

0

每个实例都有自己的实例内存,您可以在设置中指定它们。

的问题,你将要面对的:

  1. 请求路由到“正确”的情况。
  2. 实例可随时重新启动。

您可以将您的游戏状态保留在Memcache中,它充当您的所有实例共享的“内存”。这样你的实例可能变成“无状态” - 每个实例在Memcache中找到正确的“游戏”并更新它(然后是数据存储区)。

+0

谢谢!所以如果我正确地理解了这个,就有实例内存,还有memcache。我将探讨在将来某个时候切换到与memcache更兼容的模型,但现在,我将尝试执行实例内存方法。我可以在哪些设置中找到它?我看到了memcache设置和云存储桶设置,但没有实例内存...... – Verdagon

+0

您可以在部署描述中定义“实例类”,例如appengine-web.xml或app.yaml(取决于您的运行时间)。请参阅:https://cloud.google.com/appengine/docs/standard/#instance_classes –