【问题标题】:Keeping track of time with 1 second accuracy in Google App Engine在 Google App Engine 中以 1 秒的精度跟踪时间
【发布时间】:2010-10-25 22:53:26
【问题描述】:

我目前正在重写我的 java 代码以在 Google App Engine 上运行它。由于我不能使用 Timer 来编程超时(不允许创建线程),我需要依靠系统时钟来标记超时开始的时间,以便我以后可以比较它,以确定是否发生了超时。

现在,由于 Google 应用服务器的分布式特性以及无法保持时钟同步,一些人(甚至在 Google 工资单上)建议开发者不要依赖系统时间。有人说系统时钟的偏差可以达到 10s 甚至更多。

1 秒的偏差对我的应用来说非常好,2 秒是可以容忍的,任何高于此的偏差都会给我和我的应用用户带来很大的痛苦,但 10 秒的偏差会使我的应用实际上无法使用。

我不知道从那以后是否有任何改变(我希望是的),但如果没有,那么除了发出一个新的单独请求以便其处理程序在超时(由于请求超时限制,不能超过 30 秒)以保持超时持续时间一致。

谢谢!

更具体地说:

我正在尝试开发一个扑克游戏服务器,但对于那些不熟悉在线扑克如何运作的人:我有一组玩家连接到一个游戏实例。在超时发生之前,每个玩家都有一定的时间来行动,以便下一个玩家可以行动。每个演员都有倒计时,每个客户都必须看到它。一次只能有一名玩家行动。我现在需要的超时时间是 10 秒和 20 秒。

【问题讨论】:

  • 获取有关您正在尝试执行的操作的更多信息可能会有所帮助。例如,为什么您的应用需要如此精确的计时?
  • 我有一组玩家附加到一个游戏实例。在超时发生之前,每个玩家都有一定的时间来行动,以便下一个玩家可以行动。每个演员都有倒计时,每个客户都必须看到它。一次只能有一名玩家行动。

标签: google-app-engine time


【解决方案1】:

您永远不应该让您的请求处理程序休眠或等待。仅当请求处理程序在平均 1000 毫秒或更短时间内完成时,App Engine 才会自动扩展您的应用程序;刻意等待会毁了它。总是有比睡觉/等待更好的选择 - 让我们知道您在做什么,也许我们可以推荐一个。

【讨论】:

  • 你好尼克,我希望你能回复。我正在用 flex 编写扑克游戏。如果您以前没有玩过在线扑克,我还回复了 Jason,解释了应用程序应该使用更通用的术语做什么。 (也许我应该用更多相关信息更新问题?)。如果您还有其他需要了解的信息,请随时询问更多细节。谢谢。
  • 啊。根据您的问题,我以为您是在尝试等待或睡觉。虽然我们无法为 App Engine 上不同机器的时间同步提供硬性保证,但它会在 NTP 提供的通常范围内 - 几分之一秒。我确实玩在线扑克,所以我很想看看你准备好后在做什么。 :)
  • 谢谢你鼓励的话,尼克 :) 我的另一个想法是依靠代理客户端让服务器知道轮到它(比如 10 秒持续时间)已经结束,但同时使用系统时钟在服务器端保证 15 秒的时间,在这种情况下,+/- 5 秒的影响很小。然而,根据你所说的,我想我现在会跳过这一步,看看它是如何进行的。 App Engine 确实让我有些困难,但我希望最终一切都是值得的。准备好后,您将是第一批看到该应用程序的人之一 :)
  • @jaz 无论如何我都会建议一些类似的东西,因为用户仍然会注意到微小的变化和网络延迟。也就是说,我会让客户端独立显示剩余时间,并让服务器单独跟踪它,按照您的建议使用一个小的宽限期。
猜你喜欢
  • 2013-01-10
  • 2011-06-16
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多