如何在Google App Engine上实现计时器回调

时间:2013-02-18 09:58:30

标签: google-app-engine

考虑在Google App Engine上实施扑克。假设玩家只允许10秒检查/弃牌/加注。

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

3 个答案:

答案 0 :(得分:2)

GAE有一项名为“任务”的功能。遗憾的是,它们没有保证的分辨率,所以现在预定的任务+ 10秒可以在10秒内执行,或者任何以后的时间。

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

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:1)

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

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

为了让事情更具响应性,例如为了向用户展示他在折叠前他需要多少时间,你也应该在客户端上跟踪它。