2013-07-14 115 views
5

據爲zumero_sync的文檔:zumero_sync爲什麼需要多次調用?

如果需要大量的信息從服務器拉, 這個功能可能需要調用一次以上。

在我使用Zumero的Android應用程序中沒有問題;我只是繼續撥打zumero_sync,直到返回值不以"0;"開頭。

但是,現在我正在嘗試編寫一個管理腳本,它也與我的服務器dbfile同步。我想使用sqlite3外殼,並讓腳本通過命令行參數傳遞SQL來執行。我需要在循環(SQLite不支持)中調用zumero_sync以確保數據庫完全同步。如果必須,我可以在循環中調用sqlite3(讀取其輸出,查找"0;"),甚至編寫一個C++應用程序來本機調用SQLite/Zumero函數。但是如果單一的zumero_sync就足夠了,它肯定會更容易。

我想我真正的問題是:可以zumero_sync被改變,所以它在返回之前完成同步?如果有些情況下現有的行爲更有用,那麼可能有一個參數用於指定使用哪種模式?

回答

4

我在這裏看到的兩個基本問題:

(1)爲什麼zumero_sync()的工作方式是這樣?

(2)它可以工作不同嗎?

我會先回答(2),因爲它更容易:是的,它可以以不同的方式工作。相反,我們可能(也可能很快會帶來這個)實現一個額外的函數,名爲zumero_sync_complete(),它在循環中執行[zumero_sync()的內容)並在同步完成後返回。

我們沒有實現zumero_sync_complete(),因爲它沒有增加太多價值。這是一個簡單的循環,所以你可以自己寫。 :-)

呃,除了不支持循環的腳本環境。像sqlite3 shell一樣。

應答以(1):

的Zumero同步協議的目的是給服務器的靈活性,返回部分的結果,如果它希望這樣做。爲了減少服務器上的負載(並增加其可擴展性),它往往確實需要做

鑑於此,向客戶公開此信息的一個原因是爲了增加客戶的靈活性。只要我們進行多次往返,我們不妨給客戶機會在他們之間做一些事情(例如,也許更新進度條)。

客戶端可能想要在循環迭代之間執行的另一件事是處理錯誤。

或者,對於多線程客戶端,它可能需要處理髮生在客戶端上的同步正在進行的更改。

這引發瞭如何管理鎖定的問題?我們是否在整個循環期間持有sqlite寫鎖定?或者只有當絕對必要時?底線:一個強大的應用程序可能想要實現這個循環本身,以便它可以做出自己的決定並保留對事物的完全控制權。

但是,正如你所看到的,sqlite3 shell沒有循環。這不是一個應用程序。它沒有線程。或進度條。所以這是一個用例,其中zumero_sync()的一個簡單而強大的形式是合理的。

+0

謝謝Eric!順便說一句,我認爲Zumero對同步過程提供如此多的控制是很棒的。 –

相關問題