1

考虑在 Google App Engine 上实现扑克。假设玩家只有 10 秒时间过牌/弃牌/加注。

也就是说,如果 10 秒过去了,玩家没有响应,则应该触发一些计时器,该计时器执行写入 DataStore 的代码,声明玩家弃牌。在 Google App Engine 上实现此功能的惯用方式是什么。

4

3 回答 3

2

GAE 有一个称为“任务”的功能。可悲的是,他们没有保证的解决方案,因此计划为 now+10 秒的任务可以在 10 秒或更的时间执行。

解决方案:将当前时间戳连同有关当前玩家的信息一起写入数据库。如果任何玩家请求有关当前游戏的更新信息,您可以检查此时间戳,将其与当前时间戳进行比较,从而确定这 10 秒是否已过并相应地更新数据库。

您可以将此解决方案与任务相结合,以确保即使没有人“观看”该游戏,它仍会在某个时候更新。

于 2013-02-18T10:37:30.777 回答
1

这需要在后端完成,因为这是唯一可以在请求处理程序之外保留的代码。

  • 玩家被处理。计时器在后端启动。定时器到期。玩家状态更新。

后端是特殊的 App Engine 实例,它们没有请求期限、更高的内存和 CPU 限制以及跨请求的持久状态。它们由 App Engine 自动启动,可以长时间连续运行。每个后端实例都有一个用于请求的唯一 URL,您可以跨多个实例对请求进行负载平衡。

https://developers.google.com/appengine/docs/python/backends/

于 2013-02-18T10:20:27.250 回答
1

无需同步操作 - 即在用户最后一次操作后 10 秒执行某些操作。

只需记录用户最后一次操作的时间,并在下次用户操作发生时采取相应措施:如果 <10s 让用户进行下一步操作,如果 >10s 通知用户他弃牌。

为了让事情更具响应性,例如向用户显示他在折叠前有多少时间,您还应该在客户端上跟踪这一点。

于 2013-02-18T11:09:15.387 回答