2016-08-02 70 views
-1

我有一個移動應用程序,它每秒都會檢索緯度,經度,速度等等。每秒發送數據時處理數據連接中斷的最佳做法

此應用程序將這些值存儲在.csv文件中,並使用DATA連接將它們發送到遠程服務器(使用JSON格式化它們)。服務器(Apache,MySQL)檢索數據並將其放入數據庫中。然後,用戶可以在網站上進行連接,例如用GM生成跟蹤,或生成統計數據(平均速度...)。

但有時,由於景觀(山脈),數據連接失敗。因此,即使移動設備繼續存儲數據,服務器也不再接收數據。

當數據連接再次工作時,到目前爲止,服務器接收到最後一個位置。所以這兩個職位之間存在差距。

發送適當的數據填補這個空白的最佳方法是什麼?

  • 在應用程序端,總是測試數據是否丟失,如果是這樣,請將其存儲在單獨的csv文件中?
  • 然後發送此csv?
  • 或發送JSON數組?
+0

您選擇在您的應用程序和服務器之間發送數據的格式完全取決於您,並且通常由您使用的最簡單方式決定。在一般情況下,CSV對於這個問題既不比JSON更好也不差,因此對您的問題沒有客觀的「正確」答案。投票結束爲「主要基於意見」。 – eggyal

回答

1

有一個應用程序做同樣的事情(除了我使用db而不是csv),我建議你發送數據包。每秒發送一次數據會耗盡電池電量。我根據需要每分鐘發送一次或多次數據。

對於您的問題,在每次調用(HTTP POST)時,我都會創建一個JSONArray,並將其發送到每個位置。我用數據標記數據庫中的數據,以知道哪個數據已正確發送(0 =未發送,1 =發送)。狀態取決於當然的請求的狀態碼。

數據庫是從服務聽GPS跟蹤器現場填充的,帶有狀態0

在接下來的電話,我會選擇每一個不是sended數據。我更喜歡使用JSON格式,因爲我的服務器知道如何讀取它,但這是一個比優先級更重要的選擇。

0

我認爲對於這種情況沒有一個「通用」解決方案,大多數情況下,您必須爲您找到最適合的解決方案,但是我要做的是以下操作,具體取決於服務器端的實現:

  1. 創建存儲所有的信息的對象,例如,可被序列化爲一個JSON和本地存儲的「位置」的陣列。

  2. 在啓動請求之前,請更新存儲數據的對象並保存它。

  3. 溫你發起請求使用你的自定義對象作爲你的服務器的「數據」。

  4. 如果請求成功,清除所有存儲的數據(它已經發送)。

  5. 如果請求失敗,什麼都不做......數據將在下次發送。

如果你想更精確,你可以檢查請求錯誤的原因,並在情況下,它不是一個超時,這是一個服務器的問題,你可以標記數據集爲失敗,並使用一個計數器來對發生故障的數據執行最大重試次數,如果達到最大重試次數,則刪除失敗的數據,這可能是您身邊的數據結構上的錯誤,可能會阻止向服務器發送良好數據。

+0

一個數組不是一個解決方案,如果應用程序崩潰,這些數據可能會丟失,如果你處於死區幾小時,你的內存將飽和(不知道應用程序是否會被殺死或崩潰)。 – AxelH

+0

@AxelH數組將不會在內存中,並且不會丟失,因爲更新後它將保存在本地,CVS,SharedPreferences爲JSON,DB等等。這只是一個詞,所以SO知道它將是一個數據的List,而不是單個對象。 – danypata

+0

好的,你不清楚你是否存儲過這些,因爲你提到了一系列「位置」(本地存儲,設備上的所有內容都是本地的)) 是的,和我的概念一樣,我只是保留數據,主要是以顯示在地圖上的位置,但也爲了防止移除JSON的創建和服務器的響應之間存儲的發送的數據(只是說,這是一個痛苦... ...瞭解數據上的差距; )) – AxelH

相關問題