2010-10-25 93 views
0

我目前正在重寫我的java代碼以在Google App Engine上運行它。由於我無法使用Timer進行編程超時(不允許創建線程),因此我需要依靠系統時鐘來標記超時啓動的時間,以便稍後進行比較以確定超時是否已發生。在Google App Engine中以1秒的精度跟蹤時間

現在,由於Google應用服務器的分佈式特性,幾個人(甚至在Google工資單上)建議開發人員不要依賴系統時間,也不能保持其時鐘同步。有人說系統時鐘的偏差可能高達10秒甚至更多。

1s偏差對我的應用非常有用,2秒可以容忍,任何高於此值的數據都會對我和我的應用用戶造成很大的傷害,但10秒的差異會使我的應用無法使用。

我不知道自那時以來是否有什麼好轉(我希望是),但如果沒有,那麼除了拍攝新的單獨請求以外,我的選擇是什麼,以便它的處理程序睡眠的持續時間超時(由於請求超時限制不能超過30秒)以保持超時持續時間一致。

謝謝!

更具體:

我試圖開發一種撲克遊戲服務器,但對於那些誰不熟悉撲克在線如何工作的:我有一組玩家連接到1個遊戲實例。 Evey球員在超時發生之前有一定的時間採取行動,以便下一名球員可以採取行動。每個演員都有倒計時,每個客戶都必須看到它。一次只能有一名球員參賽。我需要的超時時間現在是10秒和20秒。

+0

獲得有關您想要做什麼的更多信息可能會有幫助。例如,爲什麼你需要在你的應用程序中準確定時? – 2010-10-26 00:46:01

+0

我有一組玩家連接到1個遊戲實例。 Evey球員在超時發生之前有一定的時間採取行動,以便下一名球員可以採取行動。每個演員都有倒計時,每個客戶都必須看到它。一次只能有一名球員參賽。 – jaz 2010-10-26 07:29:32

回答

1

你不應該讓你的請求處理程序睡覺或等待。如果請求處理程序的平均完成時間爲1000ms或更短,App Engine將只會自動擴展您的應用程序;故意等待會毀了那個。總有比睡眠/等待更好的選擇 - 讓我們知道你在做什麼,也許我們可以建議一個。

+0

你好尼克,我希望你會回覆。我正在用flex編寫一個撲克遊戲。如果你之前沒有玩過在線撲克,我也會回答Jason,用更通用的術語解釋應該做些什麼。 (也許我應該更新與更多相關信息的問題?)。如果您還有其他需要了解的內容,請不要猶豫,以瞭解更多細節。謝謝。 – jaz 2010-10-26 11:31:58

+0

啊。從你的問題來看,我以爲你試圖等待或睡覺。雖然我們無法對App Engine上不同機器的時間同步提供硬性保證,但它將處於NTP提供的常規範圍內 - 幾分之一秒。我確實在線玩撲克,所以我很樂意看到你準備好了什麼。 :) – 2010-10-26 19:23:07

+0

謝謝你的鼓勵詞,尼克:)我的另一個想法是依靠代理客戶端讓服務器知道它的輪到(例如10秒的持續時間)已經結束,但同時保持例如在服務器端使用系統時鐘15秒,在這種情況下+/- 5秒的影響非常小。不過,根據你所說的話,我想我現在就跳過這一步,看看它是如何發展的。 App Engine肯定會讓我覺得有些困難,但我希望最終它們都值得。你會成爲第一個看到該應用程序的人,當它準備就緒時:) – jaz 2010-10-26 20:54:29