考虑在Google App Engine上实施扑克。假设玩家只允许10秒检查/弃牌/加注。
也就是说,如果10秒没有响应来自玩家,那么应该触发一些计时器,执行写入DataStore的代码,声明玩家弃牌。在Google App Engine上实现此功能的惯用方法是什么。
答案 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通知用户他已弃牌。
为了让事情更具响应性,例如为了向用户展示他在折叠前他需要多少时间,你也应该在客户端上跟踪它。