考虑在谷歌应用引擎上实现扑克。假设一个玩家只有10秒的时间检查/折叠/举起。
也就是说,如果10秒过去了,玩家没有响应,那么应该启动一些计时器,该计时器执行写入DataStore的代码,声明玩家已折叠。在谷歌应用引擎上实现这一点的惯用方法是什么。
GAE有一个名为"任务"的功能。遗憾的是,他们没有保证的解决方案,所以现在计划+10秒的任务可以在10秒内执行,或者在之后执行。
解决方案:将当前时间戳以及当前玩家的信息写入数据库。如果任何玩家要求更新当前游戏的信息,您可以检查此时间戳,将其与当前时间戳进行比较,从而确定这10秒是否已经过去,并相应地更新数据库。
你可以将这个解决方案与任务结合起来,以确保即使没有人"观看"比赛,它也会在某个时候更新。
这需要在后端完成,因为这是唯一可以在请求处理程序之外持久存在的代码。
- 玩家被发牌。计时器在后端启动。计时器过期。游戏者状态已更新
后端是特殊的应用程序引擎实例,没有请求截止日期,内存和CPU限制更高,并且在请求之间具有持久状态。它们由应用程序引擎自动启动,可以长时间连续运行。每个后端实例都有一个用于请求的唯一URL,您可以在多个实例之间对请求进行负载平衡。
https://developers.google.com/appengine/docs/python/backends/
无需同步操作,即在上次用户操作后10秒执行某些操作。
只需记录上一次用户动作的时间,并在下次用户动作发生时相应地采取行动:如果<10s让用户执行下一步操作,如果>10s,则通知用户他已折叠。
为了让事情更有响应性,例如向用户显示折叠前的时间,您还应该在客户端上跟踪这一点。