2012-03-01 19 views
0

我有幾個具有相似模式的應用程序。我對如何設計流程有所瞭解,但希望其他人能夠給我提供更好的解決方案。您可以提供更新私人數據的設計建議嗎?

該應用需要通過傳遞數據的簡單網頁訪問服務器上的小型數據庫。數據類型由大約100條記錄(大約8000-900字節)組成,這就像數據工具的名稱和特徵。這些數據在幾個月的時間內只會改變大約1次,就像當儀器被添加到列表中一樣。該應用程序將顯示用戶在應用程序開始時選擇的列表,因此它必須在開始時查找此列表。我的問題是如何最好地將數據傳送到應用程序。

我到目前爲止的選擇是讓應用程序通過http連接獲取數據,並將其首次存儲在設備上的私有文件中。然後,每次應用程序將檢查私人文件是否已創建,然後從私人文件中讀取。這應該加快數據的加載速度,因爲它不必每次都等待服務器連接。

這工作正常,直到我添加一個新的儀器。此時,我需要讓應用程序返回到服務器以獲取數據的全新副本並重建該文件。我此時的解決方案是在應用程序確定是否存在專用文件來查詢服務器以更改數據狀態之前做出簡單的請求(Y或N)。如果有變化,那麼應用程序將刪除私人文件,然後獲取數據的全新副本。

這種方法意味着總是至少有一個請求到服務器。每次只獲得新鮮的副本會更好嗎?有一些其他技術可以使用嗎?建議?

回答

0

這種情況實際上是在HTTP規範中明確提到的 - 「If-Modified-Since」HTTP標題說「只有在日期x之後修改數據才發送數據」;如果數據未被修改,則服務器應返回「304 Not Modified」狀態。

因此,在僞代碼:

App starts 
App issues HTTP request with "If-modified-since" header 
Server checks if data was modified 
if YES: 
    server responds with new data 
    app deletes old cache file, replaces with new file 
if NO: 
    server issues 304 status 
App shows cache data 
+0

很有意思!我會仔細研究。我想每個應用程序用戶都會在請求中放置一個修改後的數據文件日期。然後只需檢查狀態並按照您的建議進行操作即可。我知道問會給我一個更好的解決方案。 – 2012-03-01 16:27:01

+0

這似乎是一個難以解決的問題。我有一個IIS 6服務器生成標準的ASP網頁。我可以在標題中獲取最後修改的日期,但始終只是實際.asp頁面的日期。我放入標題的日期似乎被忽略。 – 2012-03-01 23:43:11

+0

http://jagbarcelo.blogspot.com/2009/03/conditional-get-and-etag-implementation.html – 2012-03-02 09:37:41

相關問題