2013-05-14 75 views
0

我有一個要求,我需要知道在給定的時間點在應用程序中的服務器時間是多少。一旦應用程序連接到服務器,服務器發回時間,我不知道如何更新這個時間。每秒獲取更新的服務器時間

我想到了使用定時器的地方每秒調用一次方法,並且第二次被添加到服務器時間,以便每當我詢問服務器時間時總是更新一次。但是,如果我們在主runloop上調度這個問題,則運行循環可能會或可能不會處理定時器請求(如果它正忙)。

那麼如何跟蹤服務器的時間?

謝謝

回答

0

您的服務器在特定時區爲對?只需使用請求獲取服務器的時區,並在您的應用中顯示該時區的時間。然後您可以使用計時器繼續每秒鐘更新時間。

我建議只獲取時區,因爲如果你得到服務器的時間,服務器發回應答的時間和你得到它的時間之間會有一段時間滯後 - 這會導致獲取時間的整個目的服務器。

+0

我不認爲我可以每次都進行服務器調用以獲取服務器的當前時間。一旦我第一次接到這個時間,我可以在後臺線程中以某種方式使用計時器對象,並且可以更新它。 – user2273744 2013-05-14 12:10:59

+0

@ user2273744 iOS中的計時器不是實時的,因此無法保證準確性。 – Amar 2013-05-14 12:16:13

+0

@Amar:有沒有辦法做到這一點,而不使用計時器? – user2273744 2013-05-15 09:27:24

0
  • 您無法從您的應用更新iOS系統時間;對此,沒有API 。
  • iPhone的時間通常非常準確。在iPad上,它會有所不同,但如果某種形式的互聯網連接可用,則iOS 5的性能會提高到+/- 5秒。
  • 如果要手動連接到服務器以同步時間,則應在後臺任務中執行此操作。
  • 爲了彌補延遲,您應該發出多個請求,並將往返時間的平均一半增加到服務器發送的時間。

但是,問題依然存在:爲什麼你要這麼做呢?

+0

我沒有更新iOS系統時間。我只需要在給定的時間點知道服務器的時間。另外,我不認爲這是要求服務器花時間知道服務器時間的好方法。 – user2273744 2013-05-14 12:08:33

+0

爲什麼不直接存儲offset的NSTimeInterval(服務器時間和當地時間之間的差異)呢?只要將偏移量添加到本地時間,就可以計算出推定的服務器時間。 – 2013-05-14 12:13:20

+0

但是我在這裏可以看到的問題是用戶可以在任何給定的時間點更改設備的時間。如果他這樣做,那麼所有的計算都會錯誤 – user2273744 2013-05-15 09:26:37