如何在谷歌应用引擎上实现定时器回调



考虑在谷歌应用引擎上实现扑克。假设一个玩家只有10秒的时间检查/折叠/举起。

也就是说,如果10秒过去了,玩家没有响应,那么应该启动一些计时器,该计时器执行写入DataStore的代码,声明玩家已折叠。在谷歌应用引擎上实现这一点的惯用方法是什么。

GAE有一个名为"任务"的功能。遗憾的是,他们没有保证的解决方案,所以现在计划+10秒的任务可以在10秒内执行,或者在之后执行。

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

你可以将这个解决方案与任务结合起来,以确保即使没有人"观看"比赛,它也会在某个时候更新。

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

  • 玩家被发牌。计时器在后端启动。计时器过期。游戏者状态已更新

后端是特殊的应用程序引擎实例,没有请求截止日期,内存和CPU限制更高,并且在请求之间具有持久状态。它们由应用程序引擎自动启动,可以长时间连续运行。每个后端实例都有一个用于请求的唯一URL,您可以在多个实例之间对请求进行负载平衡。

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

无需同步操作,即在上次用户操作后10秒执行某些操作。

只需记录上一次用户动作的时间,并在下次用户动作发生时相应地采取行动:如果<10s让用户执行下一步操作,如果>10s,则通知用户他已折叠。

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

最新更新