2012-04-13 36 views
49

這個時非常有用:流星應用程序如何脫機工作?

  • 服務器關閉和客戶端無法連接實時同步
  • 沒有互聯網連接
  • 用戶並不想上網,但想與應用程序一起工作;
+0

不開箱即用,當然可以實現整個離線解決方案,但這是成千上萬行代碼 – Raynos 2012-04-13 06:37:26

+0

這部分由即將推出的appcache解決:http://devel-docs.meteor.com/#appcache(至少是HTML5緩存清單)。看起來不錯! – Vindberg 2013-03-12 11:48:23

+0

如果One需要開發完整的離線移動應用程序,該怎麼辦? [我的問題](http://stackoverflow.com/questions/27893600/meteor-for-non-internet-mobile-app)上沒有答案。任何有見解的人。 – 2015-01-12 04:55:44

回答

55

是的!這在Meteor中已經實現了。

如果與服務器的連接丟失,客戶端仍然可以在本地運行。數據庫寫入將在客戶端顯示成功並立即反映在屏幕上。一旦連接重新建立,Meteor將重新發送所有待處理的方法請求到服務器,並使用服務器的結果更新客戶端顯示。這都是延遲補償的結果,離線處理就像服務器速度很慢。

客戶端可以監視被動的'Meteor.status()'輸出以查看當前連接的狀態。例如,你可以使用Meteor.status來驅動一個帶有重新連接定時器和'立即連接'按鈕的彈出窗口,就像gmail一樣。

編輯:當然,流星不是魔術。如果你點擊「重新加載」,或離開頁面等離線,你會失去你的流星會議,不能重新開始,直到你重新獲得網絡。不過,所有使用離線模式的網絡應用都是如此,所以它不應該讓您的應用的用戶感到意外。

+2

這確實是答案,謝謝n1mmy – dennis 2012-04-13 08:58:38

+29

當連接不可用時,在LocalStorage中的客戶端上存儲髒記錄會很有趣,以便在本地頁面狀態丟失的情況下可以恢復它們。我想在流星中看到這個功能。 我也很想探索如何在本地存儲整個數據集(可能作爲應用程序緩存清單中的文件),以便應用程序可以在離線時重新打開和使用,但這是一個困難的要求。 – 2012-04-13 22:39:48

+6

我開發了一個庫,允許您的Backbone.js應用程序使用相同的算法離線工作。 https://github.com/Ask11/backbone.offline – 2012-04-14 10:56:17

11

還有另外兩個選項可以解決'如果你的標籤關閉,或者你重新加載'的問題。我還沒有嘗試過,但看起來很有趣。

https://github.com/awwx/meteor-offline-data

流星離線數據流星離線數據項目的

首頁,實現了 「脫機 集」,它封裝了Meteor.Collection:

數據從服務器永久存儲在瀏覽器數據庫中,即使應用程序啓動 並使其脫機,它也可以使應用程序可用。

用戶所做的更改也保存在瀏覽器數據庫中, 保留它們,如果瀏覽器關閉並重新打開。下一次 應用程序上線後,更改將發送到服務器。

即使在離線狀態下,在同一個 應用程序上打開的瀏覽器窗口中也會反應性地共享更新。

https://github.com/GroundMeteor/Meteor-GroundDB

特點:

光足跡

廣泛的瀏覽器支持Chrome,Safari瀏覽器,Firefox和Internet Explorer 9 回退到正常流星。如果沒有本地存儲則收集 收藏中的更改恢復方法簡歷工作離線更新交叉 窗口選項卡支持SmartCollection離線支持 僅客戶端數據庫使用EJSON.minify和EJSON.maxify到 在localstorage中壓縮數據在未來,將是一個可定製的衝突處理程序的服務器端

-1

我不是專家,但讓我們設想一個解決方案:

不是在平板電腦/單元(不知道我們能這樣的設備上安裝流星棧),但在桌面上,用戶需要一個離線可用性,例如銷售點,一些交易記錄,a有限的或不是最新的產品清單,定價和庫存等。 (交易使用的物理上不是本地的,應該是「待確認(離線訂單)」» (即使已經存在該庫存的地點也可以出售由於他們或其他用戶處於離線狀態,特別是當股票的用戶是離線的股票時),他們並不知道,因爲他們不知道,使用另一個Meteor網絡應用程序)

當然,並非應用程序的所有部分都可以脫機使用:敏感記錄創建,某些事務,需要完整收集的搜索等。脫機功能可以通過本地mac帶有已安裝工作的本地完整堆疊流星的hine網絡服務器。

Oplog會將這些離線數據庫同步到集中服務器上的鏡像集合,每個用戶擁有一個特定的數據庫,因此並非所有可在用戶計算機上脫機的大數據。 這個想法是保持一些功能的可用性。 否則我們可能只有一個數據庫用於所有用戶的離線交易,但oplog會在所有用戶的離線數據庫上同步所有這些交易。我們可以儘快發佈並清除這些記錄,但不利於隱私。最好的情況是,客戶端的離線數據庫 - 在中央服務器上鏡像一個 - 只包含該用戶創建的記錄或用戶可能需要的信息,因此每個用戶需要一個特定的數據庫。

中央服務器端函數將定期驗證並將這些記錄發佈到更大的所有包含用戶的集中式數據庫。

一個簡單的方法:使用本地離線流星應用程序完成的所有交易,當可用時將交易發佈到web服務。 (這樣一來,用戶就不必使用2個應用程序,來回管理。)

我們可以使用2個發票編號的概念: 銷售發票號碼:(?文檔ID)在交易時間產生

連續發票號碼:爲了會計目的,稍後生成(當在線和15到20秒的文件舊。我們肯定知道,在那個時期創建的所有新發票)

這裏的想法是有一個本地流星堆取本地持久性的汽車, OPLOG與集中持久性同步(除非我們發送asynchrone webservice的呼籲事務發佈時在線,但我們與較大的數據庫鬆散自動sinc)

(畢竟,也許最好有2個應用程序運行:在本地,一箇中央服務和讓這兩個人談話的方式,或者一個在線和離線的應用程序用一種舒適的方式來指導用戶優先使用在線的和離線的,如果離線的話)

會很好,如果通信更多知識淵博的人評估並記錄一種工作方式。我還沒有使用流星,仍然在基本的學習過程中。

感謝,

馬克行

+1

雖然你的回答有些全面,但我認爲你有點缺少了這一點。 – Dave 2015-01-31 19:57:05

+0

當然,我正在評估的可能性,但不知道最好的解決方案是什麼。 (順便說一句,我可能會更新我的帖子,因爲你讀了它)很高興能夠得到我缺少的點精確。不管怎麼說,還是要謝謝你。 – EMHmark7 2015-01-31 20:02:10

0

底:

1)無論是瀏覽器可以充分節省了實際會話(每隔多長時間,每次應用程序要求,因爲有變化呢?。這樣的應用程序,每10秒是不夠的,我們需要每一個事件)。我們可以用Firefox編程嗎? (但它需要保存所有東西(HTML,JS,MinoMongoDB等)只需要一次更改!)

2)或者我們有一個客戶端完整的流星堆照顧本地的東西(本地的應用程序)但以某種方式將其CRUD操作傳遞給另一個選項卡或瀏覽器實例中的另一個在線應用程序。 (第二個應用程序將由真正的遠程服務器提供)問題是如果這樣的2個應用程序可以通信。我想瀏覽器會因爲安全原因禁止它)

另一個更有創意的想法可能是:激活客戶端堆棧上的oplog。 3)除非我們可以從客戶端的流星發送call()請求,否則我們可以在客戶端的流星中發送call()請求,全堆棧到服務器上的另一個流星堆棧。 (這可能嗎?有沒有關於流星URL域限制的一些規則)

但它不能解決其在平板電腦上全流星堆棧的可能性(我不知道shuch的事情是可能的)